Многопроцессорность Python в сочетании с многопоточностьюPython

Программы на Python
Ответить
Anonymous
 Многопроцессорность Python в сочетании с многопоточностью

Сообщение Anonymous »

Я не уверен, что то, что я пытаюсь сделать, является допустимой практикой, но вот оно:
Мне нужна высокая степень распараллеливания моей программы, поэтому я подумал, что могу создать 2-3 процесса, и каждый процесс может иметь 2-3 темы.

1) Возможно ли это?
2) Есть ли в этом смысл?
3) Это мой код, но он зависает, когда я пытаюсь присоединиться к процессам.

PQ = multiprocessing.Queue()


[...]

def node(self, files, PQ):

l1, l2 = self.splitList(files)
p1 = multiprocessing.Process(target=self.filePro, args=(l1,PQ,))
p2 = multiprocessing.Process(target=self.filePro, args=(l2,PQ,))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()

p1.join() # HANGS HERE
p2.join()
while 1:
if PQ.empty():
break
else:
print(PQ.get())
PQ.join()

def filePro(self,lst,PQ):
TQ = queue.Queue()
l1, l2 = self.splitList(lst)
t1 = threading.Thread(target=self.fileThr, args=('a',l1,TQ,))
t2 = threading.Thread(target=self.fileThr, args=('b',l2,TQ,))
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()

t1.join()
t2.join()
while 1:
if TQ.empty():
break
else:
PQ.put(TQ.get())
TQ.task_done()
TQ.join()

def fileThr(self,id,lst,TQ):
while lst:
tmp_path = lst.pop()
if (not tmp_path[1]):
continue
for item in tmp_path[1]:
TQ.put(1)
TQ.join()


Подробнее здесь: https://stackoverflow.com/questions/274 ... ithreading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»