Форум сайта python.su
0
Здравствуйте,
подскажите, как реализовать следующее:
- породить несколько потоков (задач), которые выполняют некую работу
- создать что-то типа менеджера/монитора, который через некоторое время будет проверять состояния потоков и если один из них умер (скажем произошла ошибка в таске), сообщал об этом, но не переставал опрашивать “выживших”
- менеджер должен иметь механизм, который терминирует все опрашиваемые таски.
Что лучше использовать для этих целей?
- threading
- subprocess
- multiprocessing
Офлайн
15
Потоки для каких целей нужны? Если для вычислительных, то они не помогут из-за GIL, надо использовать multiprocessing. subprocess - это вообще по-моему для запуска сторонних приложений.
Офлайн
1
Subprocess это совсем не то, как сказали выше.
А вот на счет multiprocessing могу сказать, что это платформо зависимая штука. И если у Вас не никсы, то могут возникнуть трудности с передачей объектов в процессы (они должны быть сериализируемы).
Если задача стоит чисто в абстрактом менеджере процессов, без прироста производительности, то трэды отлично подходят.
Офлайн
0
У меня несколько устройств, которые мне нужно опрашивать. Использую ubuntu. Производительность в моей задаче особо не нужна.
Офлайн
15
CommonUser
У меня несколько устройств, которые мне нужно опрашивать. Использую ubuntu. Производительность в моей задаче особо не нужна.
Офлайн
0
Я в пайтоне недавно, и код не совсем понимаю, по крайней мере не увидел локов, мутексов и тд.
def task_processor(task_iter, task_queue, limit): try: for task in tasks: taskq.put(task) finally: for x in xrange(limit): taskq.put(STOP)
Офлайн
15
CommonUserЕсть Queue, внутри них используются локи. Код да, странный, я не обращал внимания на параметры).
Я в пайтоне недавно, и код не совсем понимаю, по крайней мере не увидел локов, мутексов и тд.
Отредактировано plusplus (Фев. 26, 2013 07:14:33)
Офлайн
0
processor = Thread(target=task_processor, args=[tasks, taskq, limit])
def task_processor(task_iter, task_queue, limit): try: for task in tasks: taskq.put(task) finally: for x in xrange(limit): taskq.put(STOP)
Офлайн
0
http://docs.python.org/2/library/queue.html
Да, прочитал, это thread-safety queue
Офлайн
0
Скажите пожалуйста, как создать новый поток и использовать его несколько раз, то есть запускать, а не создавать снова. Python 2.7
Офлайн