3

Существуют ли альтернативные механизмы для создания продолжительного процесса, кроме бесконечного цикла?Механизмы для создания долговременного процесса

Общая картина, кажется, это:

while True: 
    # Check for some condition or waiting for some event 
    # Do some processing 
    time.sleep(0.01) 

Я особенно заинтересован в сценарии, где процесс выступает в качестве работника, который слушает какого-либо события (например, ожидание в очереди задач).

Каковы рабочие характеристики альтернативных подходов?

+0

Вы можете рассмотреть asyncio: https://docs.python.org/3.4/library/asyncio.html –

+0

@SimeonVisser, не могли бы вы объяснить, почему асинчио может быть уместным? – skyork

ответ

1

предшествующего уровня техники на «ждать и процесс работы» вещь было сделано несколько различных способов:

  • рабочих процессов или потоков (см multiprocessing и threading для некоторых полезных примитивов)
  • событий на основе обработки (асинчио, скрученный и некоторые другие). Ваша асинхронная библиотека ввода-вывода вызывает событие, когда вы получаете данные по STDIN или любому другому каналу, который вы выберете.
  • Однопоточный буфером ввода-вывода. В зависимости от ваших желаемых характеристик нагрузки, может быть разумным, чтобы рабочие процессы просто подождали IO и обработали его, когда это произойдет. Никакой причудливой очереди. Просто позвольте ядру буферизовать IO и блок вызывающего процесса, когда он будет заполнен.
0

Если вы предвидя необходимость выполнения для многих затянувшийся задач (и масштабирование на большее количество машин), более высокоуровневая система, как Celery может быть стройным:

" Сельдерей - простая, гибкая и надежная распределенная система до обрабатывает огромное количество сообщений, обеспечивая при этом операции с инструментами , необходимыми для поддержки такой системы. Это задача с фокусом для обработки в режиме реального времени, а также для поддержки задачи планирование "

Смежные вопросы