Длительные рабочие, блокирующие ошибки тайм-аута GIL - PullRequest
1 голос
/ 01 февраля 2020

Я использую dask-дистрибутив с локальной настройкой (LocalCluster с 5 работниками) на рабочей нагрузке с задержкой dask. Большая часть работы выполняется привязками vtk Python. Поскольку vtk основан на C ++, я думаю, что это означает, что работники не выпускают GIL, когда в длительном операторе. Когда я запускаю рабочую нагрузку, мой терминал печатает кучу ошибок, таких как:

Traceback (most recent call last):
  File "C:\Users\patri\AppData\Local\Continuum\anaconda3\lib\site-packages\distributed\comm\core.py", line 221, in connect
    _raise(error)
  File "C:\Users\patri\AppData\Local\Continuum\anaconda3\lib\site-packages\distributed\comm\core.py", line 204, in _raise
    raise IOError(msg)
OSError: Timed out trying to connect to 'tcp://127.0.0.1:49721' after 10 s: connect() didn't finish in time

Однако моя рабочая нагрузка продолжается нормально - я получаю кучу ошибок в командной строке, но он продолжает пыхтеть. Поэтому я думаю, что рабочие не рушатся, но связь с сердцебиением прекращается. Так как я не хочу связываться с внутренностями vtk для выпуска GIL, как я могу исправить ошибки? Я получаю так много таких доброкачественных ошибок тайм-аута, что не вижу реальных ошибок, которые могут произойти.

1 Ответ

1 голос
/ 10 февраля 2020

Временно отпустите GIL, переместив событие VTK l oop thread. Если вы используете экземпляр vtkWindowRendererInteractor, создайте таймер с обратным вызовом, который немного замедляет выполнение, используя встроенную функцию sleep.

...