У меня есть требование, которое требует от меня запускать 480 потоков и 16 процессов (каждый процесс будет иметь 30 потоков, поэтому это 480). Я слышал, что из-за GIL у python нет хорошей поддержки многопоточности! Есть ли способ эффективно выполнить приложение с указанными выше требованиями в python? Заранее спасибо.Python многопоточность, многопроцессорная обработка
ответ
Это должно дать вам представление о том, как это делается.
import multiprocessing
import threading
def thread():
pass
def process():
threads = []
for i in range(30):
t = threading.Thread(target=thread)
threads.append(t)
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
processes = []
for i in range(16):
p = multiprocessing.Process(target=process)
processes.append(p)
p.start()
for p in processes:
p.join()
К сожалению, операции более интенсивные для ЦП, чем I/O, и код в чистом питоне! Хорошо ли идти с питоном или выбрать какой-то другой язык? –
Если вам просто нужно многопоточность b/c сокетов, прочтите следующее: https://docs.python.org/2/library/asyncore.html – Ayy
Разве вы не сказали, что POS-симулятор написан на C, а Python будет отправлять только запрашивает его через сокеты? Похоже, что это сервер, который будет делать тяжелую работу? Пожалуйста, уточните, спасибо. – plamut
Это зависит от вашего кода и типа проблемы, которую вы пытаетесь решить. Python GIL применяется к связанным с процессором потокам, то есть потокам, которые хотят выполнять задачи с интенсивным использованием процессора *.
Однако, если ваши потоки связаны с I/O-привязкой, то есть большую часть времени, ожидая ввода/вывода, GIL не будет проблемой, потому что, ожидая завершения операции ввода-вывода, потоки могут выполнять не требуется блокировка интерпретатора Python. Примером может служить ожидание завершения сетевой операции (например, загрузка файла). Вы можете легко запускать несколько потоков и одновременно загружать файлы.
* примечание: даже для задач с привязкой к ЦП GIL применяется только к Код Python. Если поток использует C-расширение (т. Е. Библиотеку, написанную на C), он не будет нуждаться в GIL во время выполнения, потому что он не будет выполнять инструкции Python.
Редактировать: Чтение вашего комментария о том, что вы будете активировать функции имитации POS через сокеты ... это операция ввода-вывода. Пока сервер будет выполнять вызовы функций, Python (клиент) просто будет ничего не делать, и потокам не потребуется большую часть времени удерживать GIL.
- 1. Многопроцессорная обработка | Многопоточность ffmpeg в python
- 2. Многопроцессорная/многопоточная обработка в Python ..?
- 3. Многопроцессорная обработка Python itertools
- 4. Многопроцессорная обработка Python завершается чисто
- 5. Многопроцессорная обработка Python для манекенов
- 6. Python Многопроцессорная обработка всей программы
- 7. Многопроцессорная обработка Python на Loop
- 8. Python многопроцессорная обработка имя процесса
- 9. Многопроцессорная обработка с помощью Python?
- 10. Python обработка файлов многопоточность
- 11. Многопроцессорная или многопоточная обработка?
- 12. многопроцессорная обработка и обновление графического интерфейса - Qprocess или многопроцессорная обработка?
- 13. Многопроцессорная обработка дочерних процессов
- 14. Python многопроцессорная обработка и поиск файлов
- 15. Многопроцессорная обработка Python с помощью скрученного реактора
- 16. Многопроцессорная обработка Python и общая переменная
- 17. Многопроцессорная обработка Python закрывается слишком рано
- 18. Многопроцессорная обработка с помощью python и зависимостей
- 19. Многопроцессорная обработка и запуск нескольких интерпретаторов Python
- 20. Python - многопроцессорная обработка для сборки массива
- 21. Python Enthought Canopy: многопроцессорная обработка не работает
- 22. Python многопроцессорная обработка с использованием карты
- 23. Встроенный python: многопроцессорная обработка не работает
- 24. Python: многопроцессорная обработка, 8/24 ядра загружены
- 25. Многопроцессорная обработка в pandas
- 26. многопроцессорная обработка и модули
- 27. Многопроцессорная обработка в wxpython
- 28. Многопроцессорная клавиатура Обработка ввода
- 29. Многопроцессорная обработка Java
- 30. Многопроцессорная обработка с прогрессом
Зачем вам так много потоков в первую очередь? –
Сложный ... Я настраиваю симулятор POS (точки продажи) .... Код написан на C (сервере) Я должен вызывать функции из python (на стороне клиента) через сокеты! Итак ... –
Существует хороший [набор слайдов] (http://www.dabeaz.com/python/UnderstandingGIL.pdf), показывающий, как GIL вмешивается в потоки. – meuh