/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int|void|null
* @throws ORMException
* @throws MappingException
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$limit = 500;
$offset = $input->getArgument("offset");
while (true) {
$this->entityManager->beginTransaction();
if (!$this->entityManager->isOpen()) {
$this->entityManager = $this->entityManager->create(
$this->entityManager->getConnection(),
$this->entityManager->getConfiguration()
);
}
$organizations = $this->getOrganizations($offset, $limit);
if (!is_array($organizations) && count($organizations)) {
break;
}
/** @var Organization $organization */
foreach ($organizations as $organization) {
$category_names = explode("|", $organization["services_str"]);
$category_repository = $this->entityManager->getRepository("App:Category");
foreach ($category_names as $category_name) {
/** @var ArrayCollection $categories */
$categories = $category_repository->findBy([
"name" => $category_name
]);
if (!is_array($categories)) {
continue;
}
/** @var Category $category */
foreach ($categories as $category) {
if ($category_name === $category->getName()) {
$name = $organization["name"];
try {
$this->insert($organization["id"], $category->getId());
$output->writeln(sprintf("<info>offset: $offset %s:$name to $category_name memory_get_usage: %d</>",$organization["id"], memory_get_usage(true)));
} catch (Exception $e) {
$output->writeln(sprintf("<error>Привязка уже состоялась! memory_get_usage: %d</>", memory_get_usage(true)));
$this->entityManager = $this->entityManager->create(
$this->entityManager->getConnection(),
$this->entityManager->getConfiguration()
);
}
}
unset($category);
}
}
unset($categories);
unset($category_names);
unset($organization);
unset($category_repository);
}
unset($organizations);
$this->entityManager->commit();
$offset = $offset + $limit;
}
import requests
url = "http://www.trafficengland.com/api/events/getAlerts"
querystring = {"start":"100","step":"100","order":"Severity","is_current":"1","events":"CONGESTION,FULL_CLOSURES,ROADWORKS,INCIDENT,WEATHER,MAJOR_ORGANISED_EVENTS,ABNORMAL_LOADS","unconfirmed":"false","completed":"false","includeUnconfirmedRoadworks":"true","_":"1573508267255%3C/code%3E%3C/pre%3E%3Cbr/%3E%3Cbr/%3E"}
headers = {
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
import http.client
conn = http.client.HTTPConnection("www,trafficengland,com")
headers = {
'cache-control': "no-cache"
}
conn.request("GET", "api,events,getAlerts", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Для инсертов я бы на вашем месте транзакцию заюзал на пачки в 1к например. 5кк раз пересчитывать индексы - это очень печально.
$offset = $input->getArgument("offset");
while (true) {
$this->entityManager->beginTransaction();
...
может быть несколько insert
...
$offset++;
$this->entityManager->commit();
}
что это за ссылки? как их с помощью кода на пайтоне получить?
и по этим ссылкам не все записи со страницы а только часть
http://www.trafficengland.com/api/events/getAlerts?start=0&step=100&order=Severity&is_current=1&events=CONGESTION,FULL_CLOSURES,ROADWORKS,INCIDENT,WEATHER,MAJOR_ORGANISED_EVENTS,ABNORMAL_LOADS&unconfirmed=false&completed=false&includeUnconfirmedRoadworks=true&_=1573508267254
http://www.trafficengland.com/api/events/getAlerts?start=100&step=100&order=Severity&is_current=1&events=CONGESTION,FULL_CLOSURES,ROADWORKS,INCIDENT,WEATHER,MAJOR_ORGANISED_EVENTS,ABNORMAL_LOADS&unconfirmed=false&completed=false&includeUnconfirmedRoadworks=true&_=1573508267255
Попробуйте сначала подключиться к базе из любого другого менеджера, но обязательно нужно указать внешний IP
И не забывайте пересобирать контейнер!
У вас явно, база данных не пускает, так как она не настроена на внешний доступ.