Python pool.apply_async () не вызывает целевую функцию?

Я пишу процедуру оптимизации для поиска методом перебора оптимальных гиперпараметров в пространстве решений; а apply_async вообще ничего не делает. Ubuntu Server 16.04, Python 3.5, PyCharm CE 2018. Кроме того, я делаю это на виртуальной машине Azure. Мой код выглядит так:

class optimizer(object):

    def __init__(self,n_proc,frame):

        # Set Class Variables

    def prep(self):

        # Get Data and prepare for optimization


    def ret_func(self,retval):

        self.results = self.results.append(retval)
        print('Something')

    def search(self):

        p = multiprocessing.Pool(processes=self.n_proc)

        for x, y in zip(repeat(self.data),self.grid):

            job = p.apply_async(self.bot.backtest,(x,y),callback=self.ret_func)

        p.close()
        p.join()

        self.results.to_csv('OptimizationResults.csv')

        print('***************************')
        print('Exiting, Optimization Complete')

if __name__ == '__main__':

    multiprocessing.freeze_support()

    opt = optimizer(n_proc=4,frame='ytd')
    opt.prep()
    print('Data Prepped, beginning search')
    opt.search()

Я запускал эту точную настройку на виртуальной машине Windows Server и переключился на нее из-за проблем с multiprocessing, которые не использовали все ядра. Сегодня я настроил свою машину и смог запустить оптимизацию только один раз. После этого он загадочным образом перестал работать без каких-либо изменений с моей стороны. Кроме того, я должен упомянуть, что он выдает вывод каждый раз из 10, когда я его запускаю. Очень странное поведение. Я ожидаю увидеть:

Something
Something
Something
 .....

Как правило, это лучшие результаты оптимизации на «сегодняшний день» (опущены для ясности). Вместо этого я получаю:

Data Prepped, beginning search
***************************
Exiting, Optimization Complete

Если я вызываю get() для объекта async, результаты печатаются, как ожидалось, но используется только одно ядро, потому что результаты собираются в цикле for. Почему apply_async вообще ничего не делает? Я должен упомянуть, что я использую кнопку «стоп» в Pycharm, чтобы завершить процесс, не уверен, что это как-то связано с этим?

Дайте мне знать, если вам нужны более подробные сведения о prep() или bot.backtest().

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
834
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел ошибку! В основном я преобразовывал dict() в list() и передавал значения из списка в свою функцию! Порядок параметров списка менялся каждый раз, когда я запускал функцию, и один из параметров должен был быть целым числом, а не числом с плавающей запятой.

По какой-то причине в окнах порядок словаря сохранялся при преобразовании в список; не в случае с Ubuntu! Очень интересно.

Другие вопросы по теме

Матрица Numpy строк, преобразованная в общий массив строк, создает несоответствие типов
Пул многопроцессорной обработки и рабочие процессы apply_async и обратный вызов не вызываются при выполнении во внутренней области
Почему параллельное программирование через многопроцессорную библиотеку занимает больше времени, чем обычное программирование?
Копирует ли процесс глубокое копирование трубного соединения?
Удаляет ли keras.backend.clear_session () сеансы в процессе или глобально?
Использование многопроцессорной библиотеки в Python 3 для запросов PostgreSQL
Отправка задания на многопроцессорную обработку Python на основе совокупных критериев для всех выполняемых заданий
Написание файла JSON с использованием многопроцессорной обработки - Python
Как мне вставить / обновить дату в моей БД? Я использовал Python 3, SQLAlchemy, многопроцессорность. Подключение недоступно
Почему больше рабочих, чем процессоров в многопроцессорном Python улучшает время выполнения?