выполнять функции в очереди

1

У меня есть пример, который должен показать, что я хотел бы сделать

queue = 2

def function():
    print 'abcd'
    time.sleep(3)

def exec_times(times):
    #do something
    function()

def exec_queue(queue):
    #do something
    function()

exec_times(3)
#things need be working while it waiting for the function finish
time.sleep(10)

результат должен быть

abcd
abcd

#after finish the first two function executions
abcd

Итак, есть ли способ сделать это без использования trhead?

Я имею в виду некоторую функцию glib для выполнения этой задачи.

  • 1
    Для параллельного выполнения вам понадобится какая-то многопоточная модель.
Теги:

1 ответ

2
Лучший ответ

Если вы хотите избежать потоков, одним из вариантов является использование нескольких процессов. Если вы находитесь на python 2.6, взгляните на модуль multiprocessing. Если python 2.5, посмотрите pyprocessing.

Обратите внимание на "Пулы процессов" в документах для многопроцессорности, которые, как представляется, отвечают вашим требованиям:

Можно создать пул процессов, которые будут выполнять задачи, переданные ему с классом пула.

класс multiprocessing.Pool([процессы [, initializer [, initargs [, maxtasksperchild]]]])

Объект пула процессов, который управляет пулом рабочих процессов, к которым выполняются задания     могут быть представлены. Он поддерживает асинхронные результаты с таймаутами и обратными вызовами    и имеет реализацию параллельной карты.

  • 0
    Я думаю, что-то вроде glib.timeout_add (интервал, обратный вызов, ...) вместо того, чтобы выполнять функцию каждый интервал, он будет наблюдать за функцией до ее завершения, а затем вызывается обратный вызов. Спасибо за ответ
  • 0
    Взгляните на Process Pools - смотрите обновление в моем ответе.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню