Python Запустить Функцию в Отдельном Потоке • Зеленые потоки
Асинхронное программирование потоково обрабатывает пользовательское пространство. Здесь уже не процессор участвует в переключении контекста, а само приложение, и происходит это в заранее заданных точках. Что ж, я не хочу, что бы у вас создалось впечатление, будто схема поставщик-потребитель плоха для многопоточной разработки — это определенно не так. Обратный вызов использует сопрограммы, которые могут выполнять свои задачи без участия программиста, но имеют трудности отладки и невозможность обработки исключений.
4 ответа
Никакого вопроса с вашим текущим подходом я не вижу. Он рабочий у меня как в Python 2.7, так и в 3.4.5.
Не имея объекта к Timer классу, вам придётся перелопатить ваш интерпретатор для того, чтобы остановить тред.
Лично я предпочитаю писать тред таймера, расширив Thread класс как:
Это обеспечивает большую гибкость в модификации изменений на будущее.
Я запускаю это в python 3.6. Работает ок как вы и ожидали .
В чем может быть проблема в том, что вы при каждом запуске printit создаете новый тред.
Лучшим способом может быть просто создать один тред, который делает то, что вы хотите, что он делает и потом вы отправляете и событие на его остановку, когда он закончит почему-то:
У меня используется Python 3.6.0.
А у меня используется _thread и пакет time.
Сегодня есть сервер (gsoap) написанный на c++. У меня есть c# приложение (c# 4.0, winforms). Я генерирую wsdl из этого сервиса. Так вот я могу вызывать некоторые функции в своем app. Но продолжительность выполнения этих функций больше часа. Я думаю, что лучший способ такой: 1) Я вызываю эту.

Асинхронное программирование в Python
Похожие вопросы:
У меня есть function которую я хочу запустить на отдельном потоке . Мой вопрос в том, должен ли я в новом потоке создавать объект функции для того чтобы он запускался на отдельном потоке или я могу.
Как можно запустить функцию на отдельном потоке, если доступен поток, предполагая, что я всегда хочу, чтобы k потоков запускались одновременно в любой точке? Вот псевдокод For i = 1 to N IF.
Сегодня есть сервер (gsoap) написанный на c++. У меня есть c# приложение (c# 4.0, winforms). Я генерирую wsdl из этого сервиса. Так вот я могу вызывать некоторые функции в своем app. Но.
Я знаю, что нативная поддержка threads в Julia пока неполная, но я хочу жить на кровоточащем крае. Я построил master ветку с JULIA_THREADS=1 , и автоматическая многопоточность с @threads работает.
У меня есть график python из sched модуля который я хочу выполнить в отдельном потоке при этом иметь возможность остановить его в любой момент. Я посмотрел модуль threading но не знаю какой.
Теперь давайте сделаем что-нибудь процесорно-раздельное! Довольно распространенная задача у меня на работе — это обработка больших коллекций картинок. Одна из таких задач — создание миниатюр. И это можно распараллелить. Синхронизация потоков определяется как механизм, обеспечивающий, чтобы ни один из двух потоков не выполнял определенный сегмент программы, который обращается к общим ресурсам. состояние гонки поскольку Asyncio запускает только одну сопрограмму и переключается только в точках, которые вы определяете, ваш код не подвержен проблеме гонки потоков;.
Знакомьтесь: Map
Map — это класная маленькая функция, а главное, проста для распараллеливания вашего Python кода. Для тех, кто не вкурсе, map заимствована из функциональных языков, вроде Lisp’а. Это функция, которая применяет другую функцию к последовательности, например:
Этот код применяет метод urlopen к каждому элементу переданной последовательности и сохраняет полученные результаты в список. Это более-менее эквивалентно следующему коду:
Функция map управляет итерацией последовательности, применяет нужную функцию, и в конце сохраняет все получившиеся результаты в список.
Почему это имеет значение? Потому, что используя определенные библиотеки, map делает использование многопоточности тривиальным!
Отступление: Что это? Никогда не слышал о многопоточном клоне библиотеки multiprocessing под названием dummy? Я тоже не слышал до недавнего времени. Есть всего одно предложение на странице официальной документации библиотеки multiprocessing. И это предложение сводится к “Ах да, эта вещь существует”. Это печально, скажуя вам!

Многопоточность в Python: Простая ссылка.
Приступим
Для доступа к map-параллельной функции, сперва нужно импортировать модули в которых она содержится и создать пулл:
Последнее выражение делает то же, что и семистрочная функция build_worker_pool в приведенном ранее примере. А именно, создает кучу доступных воркеров, поготавливает их к выполнению задач, и сохраняет их в переменной, что бы к ним было легко обратиться.
Объекты из пула принимают несколько параметров, но сейчас упоминания стоит только один: processes. Этот параметр устанавливает количество воркеров в пуле. Если оставить это поле пустым, то по умолчанию оно будет равно количеству ядер в вашем процессоре.
В общем случае, если вы используете многопроцессовый пулл для ядро-раздельных задач, то больше ядер означает большуую скорость (я говорю это с многочисленными оговорками). Однако, когда речь идет о многопоточной обработке и делах связанных с сетью, это не так, и будет хорошей идеей поэксперементировать с размером пула.
Если вы запустите слишком много потоков, вы затратите больше времени на переключения между ними, чем на полезную работу, так что в этом случае неплох поизменять параметры до тех пор, пока не найдет оптимальный вариант для вашей задачи.
Итак, теперь, когда созданы воркеры и простой способ распараллеливания в наших руках, давайте перепишем загрузку веб-страниц из предыдущего примера.
Посмотрите на это! Код который на самом деле работает занимает 4 строки, 3 из которых формальны. Функция map сделала то же, что и предыдущий код в 40 строк с такой легкостью! Для проверки я испробовал оба подхода и попробовал различные размеры пула.
Содержание
Публикуя свою персональную информацию в открытом доступе на нашем сайте вы, даете согласие на обработку персональных данных и самостоятельно несете ответственность за содержание высказываний, мнений и предоставляемых данных. Мы никак не используем, не продаем и не передаем ваши данные третьим лицам.