почему многопроцессорная обработка работает на 1 машине, а не на другой, если конфигурация python одинакова

#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, чтобы он искал соответствующий тип ответа. Это было связано с поддержанием всех моих систем в актуальном состоянии.