Я пытаюсь использовать Dask-Distributed на моем ноутбуке с помощью LocalCluster, но я до сих пор не нашел способ закрыть приложение, не вызывая некоторых предупреждений или не вызывая некоторые странные итерации с помощью matplotlib (я использую серверную часть tkAgg).
Например, если я закрою клиент и кластер в этом порядке, то tk не сможет соответствующим образом удалить образ из памяти, и я получу следующую ошибку:
Traceback (most recent call last):
File "/opt/Python-3.6.0/lib/python3.6/tkinter/__init__.py", line 3501, in __del__
self.tk.call('image', 'delete', self.name)
RuntimeError: main thread is not in main loop
Например, следующий код генерирует эту ошибку:
from time import sleep
import numpy as np
import matplotlib.pyplot as plt
from dask.distributed import Client, LocalCluster
if __name__ == '__main__':
cluster = LocalCluster(
n_workers=2,
processes=True,
threads_per_worker=1
)
client = Client(cluster)
x = np.linspace(0, 1, 100)
y = x * x
plt.plot(x, y)
print('Computation complete! Stopping workers...')
client.close()
sleep(1)
cluster.close()
print('Execution complete!')
Строка sleep(1)
повышает вероятность возникновения проблемы, так как она возникает не при каждом выполнении.
Любойдругая комбинация, которую я пытался остановить выполнение (избегать закрывать клиент, избегать закрывать кластер, избегать закрывать оба), генерирует проблемы с торнадо, вместо этого.Обычно следующее
tornado.application - ERROR - Exception in Future <Future cancelled> after timeout
Какая правильная комбинация для остановки локального кластера и клиента?Я что-то упустил?
Вот библиотеки, которые я использую:
- python 3. [6,7] .0
- tornado 5.1.1
- dask 0.20.0
- распределено 1.24.0
- matplotlib 3.0.1
Спасибо за помощь!