distrib.worker - ПРЕДУПРЕЖДЕНИЕ - сбой пульса в планировщике - PullRequest
0 голосов
/ 19 февраля 2019

Я долго выполняю задания dask.delayed () (использующие подпроцесс для запуска внешних двоичных файлов для обработки больших файлов) и получаю отмененные фьючерсы из-за того, что все работники теряют связь с планировщиком:

distributed.worker - WARNING - Heartbeat to scheduler failed

Планировщик говорит:

distributed.core - INFO - Event loop was unresponsive in Scheduler for 3.99s.  
This is often caused by long-running GIL-holding functions or moving large chunks of data.
This can cause timeouts and instability.

Почему это происходит, и как мне обойти это / исправить это?Насколько я понимаю, планировщик не запускает сам мой код на Python ...

1 Ответ

0 голосов
/ 20 февраля 2019

Как уже упоминалось в предупреждении, основной поток рабочего некоторое время не мог ничего сделать.Это часто вызывается вызовом скомпилированных функций, которые поддерживают GIL.Они захватывают GIL и затем на некоторое время исчезают в скомпилированном коде, не позволяя запускать любой другой код Python (например, сообщения пульса).

Правильный способ решения этой проблемы - заставить ваш скомпилированный код выпустить GIL.Если у вас есть контроль над этим кодом, то это обычно легко исправить в Cython, и теперь, я думаю, по умолчанию в cffi.Если вы просто звоните subprocess, то у меня нет хорошего объяснения этому.Это не должно держаться на GIL.

...