2016-04-06 34 views
2

bizarası haberleşme

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

gibi bağımsız Python3 yazıları arasında iletişim kurmak için standart multiprocessing.Queue sınıfını kullanabilir.

+0

Ben, onun örnek kod url https://docs.python.org/3.5/library/multiprocessing.html#using-a-remote- multiprocessing.managers modülüdür seçti yönetici – shiina

cevap

1

"Listeners and Clients" in the multiprocessing docs; Daha yüksek düzeyli daha basit API'lerden farklı olarak, bu API'ler, iki Python betiğinin bir ebeveyn/çocuk ilişkisi olmadan işbirliği yapmasını sağlayan eşleştirilen işlemi adrese bağlayarak ve eşleştirilen işlemi doğrulamanıza olanak tanır.

+0

Çok işlemcili bağlantı modülünü biliyorum. Yeterince açıklayamadığım için üzgünüm. Daha yüksek seviyedeki daha basit API'ları arıyorum. – shiina

+0

@shiina: Daha basit API'ler adlandırılmış adresleri işlemez. Ne yaptıklarını ve belirli bir problemi çözmenin uygun yolunu öğrenmek için 'subprocess' ve/veya 'multiprocessing 'kaynak koduna (yüksek seviyedeki şeyler Python'da her neyse) bakardım. – ShadowRanger

+0

Ancak, multiprocessing.managers modülünü bilmiyordum. Cevabınız beni modüle yönlendirdi. Teşekkürler. – shiina

1

Bu bir kişisel cevaptır. Minimum örneğim aşağıda.

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.") 

çalıştırın bu komut dosyalarını.

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

Baskılar

./bbb.py: How are you? 
./aaa.py: I'm fine.