Я начинаю набросать структуру сайта информационной службы количественного финансирования, написанного на Python (надеюсь, что на 3.x), и пришел к выводу - исправьте меня, если я ' неверно - мне придется использовать как сетевую библиотеку eventlet , так и многопроцессорную библиотеку.вопросы многопоточности и многопроцессорности для квантового сайта
Одна часть системы - это в основном задача cron, которая работает в фоновом режиме, изучая фондовый рынок и другие финансовые данные после закрытия рынка, выполняет машинное обучение и вычисления квантов, затем ставит прогнозы в простой базе данных или, возможно, даже плоский файл с разделителями-запятыми. (Аргументы, таким образом, передаются между разделами системы через файл.)
Я понимаю, что этот флажок может использоваться для неблокирующего ввода-вывода, так что красивый суп или scrapy может удалять веб-страницы с нескольких сайтов одновременно (), а библиотека многопроцессорности может позволить алгоритмам машинного обучения/кванта выполнять вычисления по всем данным запаса параллельно в виде отдельных процессов.
Для просмотра прогнозов пользователи будут подключаться к другой части системы, созданной с помощью Flask, которая будет обращаться к базе данных и отображать прогнозы.
Я предполагаю, что все эти библиотеки и смешанные потоки/процедуры многопроцессорности ладят друг с другом? Я собираюсь использовать pythonanywhere.com в качестве хоста, и у них, похоже, есть несколько «батарей». Конечно, когда тестирование будет завершено, мне, вероятно, придется обновить число «рабочих», чтобы задействовать окончательно развернутый сайт.
Любые подводные камни в смешении нитей и многопроцессорности во что-то таком сложном?
Не могу ответить на ваш вопрос окончательно, как я не пытался, что именно, но в целом это нормально, чтобы иметь несколько нитей и несколько процессов. – 101
Я не уверен, насколько тесно * gevent * связан с * eventlet *, но для поддержки многопроцессорности из * gevent *, когда потоки обезглавлены, мне пришлось использовать модуль * subprocess * для связи и * pickle * для поскольку многопроцессорность не поддерживается * gevent *. – cpburnz
PythonAnywhere dev здесь. Одна из вещей, которые вам нужно знать о том, чтобы делать это в PythonAnywhere, - это то, что мы ограничиваем потоки и процессы, которые могут запускаться пользователями, поэтому вам, вероятно, потребуется использовать пул потоков/процессов. Я считаю, что многопроцессорность имеет встроенный. – Glenn