2016-04-06 2 views
2

Можно ли использовать стандартный класс multiprocessing.Queue для обмена данными между независимыми скриптами Python3 какInterprocess связи между независимыми сценариями Python3

bash% ./aaa.py & 
bash% ./bbb.py & 

Если нет, Есть еще одна библиотека, как стандартный модуль многопроцессорной для общения с независимыми скриптами.

+0

Я выбрал модуль multiprocessing.managers, его пример кода URL является https://docs.python.org/3.5/library/multiprocessing.html#using-a-remote- менеджер – shiina

ответ

1

Взгляните на раздел на "Listeners and Clients" in the multiprocessing docs; в отличие от более простых API-интерфейсов более высокого уровня, эти API-интерфейсы позволяют устанавливать соединения по адресу и проверять подлинность парного процесса, что позволяет использовать два сценария Python без отношения родитель/ребенок.

+0

Я знаю многопроцессорный модуль подключения. Извините, что недостаточно объясняю. Я ищу более простые API-интерфейсы более высокого уровня. – shiina

+0

@shiina: Простые API не обрабатывают именованные адреса. Я бы посмотрел на исходный код 'subprocess' и/или' multiprocessing' (материал высокого уровня все в Python), чтобы получить представление о том, что они делают, и о правильном способе решения вашей конкретной проблемы. – ShadowRanger

+0

Но, я не знал модуль multiprocessing.managers. Ваш ответ привел меня к модулю. Благодарю. – shiina

1

Это сам ответ. Мой минимальный пример ниже.

aaa.py

from multiprocessing.managers import BaseManager 
import queue 

queue_a = queue.Queue() 
queue_b = queue.Queue() 
BaseManager.register('queue_a', callable=lambda: queue_a) 
BaseManager.register('queue_b', callable=lambda: queue_b) 
m = BaseManager(address=('', 50000), authkey=b'qwerty') 
m.start() 

shared_queue_a = m.queue_a() 
shared_queue_b = m.queue_b() 

shared_queue_a.put("How are you?") 
msg = shared_queue_b.get() 
print("%s: %s" % (__file__, msg)) 

m.shutdown() 

bbb.py

from multiprocessing.managers import BaseManager 


BaseManager.register('queue_a') 
BaseManager.register('queue_b') 
m = BaseManager(address=('localhost', 50000), authkey=b'qwerty') 
m.connect() 

queue_a = m.queue_a() 
queue_b = m.queue_b() 

msg = queue_a.get() 
print("%s: %s" % (__file__, msg)) 
queue_b.put("I'm fine.") 

Выполнить эти сценарии.

./aaa.py &; sleep 1; ./bbb.py 

Печать

./bbb.py: How are you? 
./aaa.py: I'm fine. 
Смежные вопросы