У меня есть сценарий Python
, который порождает процесс демона. Внутри процесса я использую multiprocessing.pool
для запуска 1
до 4
процессов одновременно.Python - вызов multiprocessing.pool внутри демона
Когда я запускаю это вне процесса демона, он отлично работает (то есть, когда я установил run_from_debugger=True
- см код ниже), но если я запускаю код с помощью процесса демона (т.е. run_from_debugger=False
), async_function
никогда не выполняется ,
Можно ли использовать multiprocessing.pool
внутри a daemon
процесс ??? Я использую Python-daemon 1.6
как мой пакет daemon (если это имеет значение).
Код:
def loop_callback(params):
#Spawn the process in the pool
# Because loop_callback is called many times, often faster than async_function executes,
# adding them to a pool allows for parallel execution.
pool.apply_async(async_function, params)
def run_service():
# loop is a method that can/will call loop_callback multiple times, and it will call
# loop_callback faster than the code in asyc_function executes
loop(alignment_watch_folder, sleep_duration)
#Class declaration
app = App()
#Declare a pool of processes
# processes=1 indicates serial execution
pool = Pool(processes=4)
#Either run from a daemon process or not
run_from_debugger = False
#Run the daemon process
if run_from_debugger:
run_service()
else:
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
Любые советы будут оценены.
Хмммм .... есть ли какие-либо другие способы? – Brett
Эта документация похожа на метод «Процесс», а не на метод «Пул», о котором я говорил. Не разрешается ли «демонический процесс создавать дочерние процессы» для «пула»? – Brett
@Brett «Многопроцессорный.Pool» - это просто объект, который обрабатывает фиксированное количество «многопроцессорных.Process». На самом деле с помощью простого теста я получаю «AssertionError: у демонических процессов не разрешено иметь детей». Если вы не получаете эту ошибку, возникает другая проблема. Вы уверены, что 'asynch_function' называется * not *? Поскольку библиотека 'python-daemon' отделяет процесс от своего терминала, поэтому нормально не видеть ничего на экране. – Bakuriu