#python #multiprocessing #pyenv
Вопрос:
У меня установлен python 3.8.6 на старом компьютере через pyenv. Я только что купил новый ноутбук и установил python 3.8.6 с помощью pyenv.
Это код, который работает на одной машине, а не на другой:
for i in range(12):
p = multiprocessing.Process(target = sngl_quote, args=(tickergrab, return_dict))
p.start()
# wait 10 seconds or until process finishes
p.join(10)
# if thread is still active
if p.is_alive():
print('timed out on 10 sec limit, trying again...')
p.terminate()
Это не удается, когда я проверяю p.is_alive().
На работающей машине это возвращает значение false.
На машине, которая не работает, это возвращает значение true.
Если я изолирую целевую функцию, она работает в обоих случаях, поэтому проблема должна быть в многопроцессорной обработке.
Я попробую все, что угодно.
Я думаю, что, должно быть, что-то установлено неправильно, но не знаю, с чего начать, чтобы это выяснить. Если это неподходящее место для этого вопроса, может ли кто-нибудь указать мне другое место, чтобы задать этот вопрос?
Спасибо 🙂
Комментарии:
1. Какие операционные системы?
2. Значит, процесс не завершил свою работу за 10 секунд на неисправной машине? Должно ли это занять так много времени? Можете ли вы ввести запись в вызываемую функцию, чтобы посмотреть, что она делает?
3. Исходя из ваших имен переменных, мне интересно, делает ли single_quote запрос HTTP или API для получения соответствующих данных. Вот где вам нужно искать проблему. Мне также интересно понять, почему повторные попытки до 12 раз помогут. Если single_quote выполнялся более 10 секунд на первой итерации, он, скорее всего, будет делать то же самое при последующих исполнениях
Ответ №1:
Комментарий Даркнайта заставил меня посмотреть в правильном направлении. Модуль, который я использовал для запроса API, был обновлен до ответа httpx, что означало, что объект ответа теперь был другого класса. Поэтому мне пришлось изменить свой код в области, где я делаю запрос API, чтобы он искал соответствующий тип ответа. Это было связано с поддержанием всех моих систем в актуальном состоянии.