Env info:
Python==3.7
Win7 i5-2310:2-cores-4-threads 4GB-memory
Dask Ini:
from dask.distributed import Client
Client()
# Client Scheduler: tcp://127.0.0.1:50723 Dashboard:
# http://127.0.0.1:8787/status Cluster Workers: 4 Cores: 4 Memory: 4.20 GB
Первый: отложенная функция с For-l oop:
@dask.delayed
def teststr(x,y):
return x+y
rt=[]
for i in range(1000):
rt.append(teststr(str(i),str(i+1)) )
rt = dask.compute(*rt)
It показывает Wall time: 3.23 s
Второй: Сумка на основе списка с функцией карты:
import dask.bag as db
b=db.from_sequence([(str(i),str(i+1)) for i in range(1000)])
def teststr2(x,y):
return x+y
%%time
rt2=b.map(lambda x:teststr2(x[0],x[1])).compute()
Показывает Wall time: 899 ms
Forl oop один занимает гораздо больше времени, чем сумка, и это стоит дискового ввода-вывода много (возможно, virtual-mem).
Я не проверял, что произойдет, если я изменю конфигурацию dask.client (поток против процесса), различные задачи (функция Integer против функции строки против функции без GIL против ввода-вывода базы данных против дискового ввода-вывода) или объекта большего размера (работа с большим DataFrame или Numpy при выполнении некоторого задания анализа данных.).
Как выбрать лучший способ для python параллельных заданий в Даск. Хотя я получаю тот же вывод, иногда это занимает слишком много времени на вычисления. Должны быть некоторые правила, помогающие мне.
Я надеюсь, что это могут быть шпаргалки, которые сообщают мне лучший способ организовать мой код на основе System-Env, виды задач или что-то еще.