Как использовать многопроцессорную обработку на базе данных - PullRequest
0 голосов
/ 19 февраля 2019

Прежде всего, спасибо всем, кто откликнулся.Так сэкономил столько времени в моих проектах программирования.Я ценю это!

Мой код перебирает огромный массив данных.Вот пример кода:

#len(df)=1,000,000
for i in range(1,len(df))
    df.iloc[i,1]=df.iloc[i,1]*40

ПРИМЕЧАНИЕ *: мой код делает что-то гораздо более сложное.Вопрос такой же, но я боялся размещать строки и строки кода.По сути, я хочу знать, как обрабатывать несколько частей фрагмента данных, используя это в качестве примера.

Я хочу разделить процессы, используя multiprocessing.Я хочу, чтобы работник выполнял задачи 1-500 000, а следующий - 500 001-1 000 000.Вот моя мысль:

from multiprocessing import Pool

def jobs(jobstart,jobend):
#len(df)=1,000,000
    for i in range(jobstart,jobend):
        df.iloc[i,1]=df.iloc[i,1]*40


if __name__ == '__main__':
    p= multiprocessing.Pool(processes=2)
    results=p.starmap(jobs, [(1,500000),(500001,1000000)])
    p.close()

print(results)

Почему это не работает?Ошибка:

  File "C:/Files for Local/fisher_scrapper/frappy.py.py", line 238, in <module>
    results=p.starmap(jobs, [(0,50),(51,100)])

  File "C:\Users\TLCLA\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 298, in starmap
    return self._map_async(func, iterable, starmapstar, chunksize).get()

  File "C:\Users\TLCLA\AppData\Local\Continuum\anaconda3\lib\multiprocessing\pool.py", line 683, in get
    raise self._value

JSONDecodeError: Expecting value
...