Каждый импорт в родительском скрипте замедляет многопроцессорную инициализацию? - PullRequest
3 голосов
/ 26 марта 2019

В настоящее время я использую пакет многопроцессорной обработки python и наткнулся на странную проблему (работа с windows 10, python 3.6). Модуль, который я написал и использовал в сценарии, инициализирует многопроцессорность, но почему-то большая задержка начинается до тех пор, пока другие ядра не начнут работать.

Получается, что чем больше я импортирую в скрипт, тем дольше первое ядро ​​должно начать работать. Самое странное в этом то, что импортированный мной модуль не может видеть другие операции импорта ...

Это немного сложно объяснить, просто взгляните на два фиктивных скрипта ниже (там даже для многопроцессорной обработки используется только одно ядро!). Если я импортирую numpy и pandas в первом скрипте, очередь во втором скрипте возвращается с задержкой в ​​1 с. Если я не импортирую эти пакеты, задержка составляет всего 0,15 с. Неважно, что я импортирую в первом скрипте, задержка постепенно увеличивается.

Я не смог найти подобную проблему в переполнении стека и был бы очень рад, если бы кто-нибудь мог помочь мне решить эту проблему.

Я уже пробовал этот код на сервере AWS (Server 2012) - та же проблема.

Первый сценарий

from multiprocessing import Process, Queue
import time
import pandas as pd
import numpy
from testmultiprocessing2 import *

if __name__ == '__main__':
   tryit()

Второй сценарий

from multiprocessing import Process,  Queue
import time


def scanner(t,output_queue):
   output_queue.put(time.time()-t)

def tryit():
   output_queue = Queue()
   t=time.time()
   pr = Process(target=scanner, args=(t,output_queue))#input_queue,output_queue,debugging_queue))
   pr.start()
   pr.join()
   print(output_queue.get())
...