2016-11-15 2 views
0

У меня есть код Python, который работает в Windows, однако при работе в Linux он просто зависает. Я использую JPype, поэтому я подозреваю, что может возникнуть проблема с несколькими совместно используемыми процессами, пытающимися использовать один и тот же канал для доступа к Java (различные процессы создаются, но зависают в строке JPype). Есть ли способ принудительного создания нереста в Pathos для копирования реализации Windows? (например, set_start_method или get_context в обычной многопроцессорной библиотеке?)Пафос: Enforce spawning на Linux

Спасибо.

ответ

0

Чтобы ответить на мой собственный вопрос (и это немного противно), но после того, как копаться в коде вы можете:

import multiprocess.context as ctx 
ctx._force_start_method('spawn') 

Который счастливо решает меня вопрос с JPype подвешивания. Разница между Linux и Windows заключается в том, что, когда Windows запускает новый процесс, запускается новый JVM (jpype.startJVM()), тогда как разветвленный процесс должен использовать один и тот же (так что я предполагаю, что существует несколько процессов, пытающихся использовать тот же самый канал для Java). Насколько мне известно, set_start_method, похоже, не был реализован.

+0

Хм ... это хорошее решение. Я думал, что можно использовать 'ForkingPickler' в' multiprocess', который дает поведение травления окон (т. Е. Нулевые общие объекты) ... но я думаю, что вы, вероятно, натолкнулись на правильный способ сделать это. –