[英]transferring data between processes in python
我對python並不陌生,但仍在尋找在進程之間共享字符串格式數據的最佳方法。
目前,我有4個進程(1個父進程+ 3個多進程子進程),父進程正在從長輪詢服務器中獲取數據,並且經過幾次檢查后才將數據發送到mysql服務器。
然后,Childs(每種任務為1)正在按照我需要的方式處理數據。
目前一切正常,我的數據已安全存儲並可以隨時訪問,尤其是在我需要調試或實現新功能的情況下,但畢竟隨着項目的增長,它的工作速度會變慢(對於Web應用程序-不好)。 您可能會假設,存儲在db中的數據類型是list或其對象。 我知道python在進程之間傳輸數據存在一些問題(最好是軟件限制)...
我當時正在考慮將數據臨時存儲在JSON或簡單的txt文件中,但是並發不允許我這樣做。 我也可以嘗試使用套接字,但是為此目的啟動回調服務器是否值得?
異步的東西對我也不起作用。 那么在這種情況下我有什么選擇呢? 我不需要丟失任何數據,就像我需要使其保持快速運轉一樣。 任何其他措施,歡迎:)
ps大多數相關主題已經過時或沒有回答我的問題,因為我確信到目前為止,我處理數據的方式並不是最好的。
IPC有很多方法(套接字,共享內存,管道,FIFO ...),我認為您可以嘗試使用pipe
,這很簡單。 請參閱以下示例:
import os, sys
def child(prefix, r, w):
os.close(w)
print(prefix + ':read')
s = os.read(r, 1024)
print(prefix + ':got:' + s)
print(prefix + ':close')
os.close(r)
print(prefix + ':exit')
sys.exit(0)
r0, w0 = os.pipe()
r1, w1 = os.pipe()
r2, w2 = os.pipe()
if os.fork():
if os.fork():
if os.fork():
os.close(r0)
os.close(r1)
os.close(r2)
print('p:write')
os.write(w0, 'hello world')
os.write(w1, 'hello world')
os.write(w2, 'hello world')
print('p:close')
os.close(w0)
os.close(w1)
os.close(w2)
print('p:exit')
sys.exit(0)
else:
child('c0', r0, w0)
else:
child('c1', r1, w1)
else:
child('c2', r2, w2)
multiprocessing
模塊提供了執行此操作的一些工具: https : //docs.python.org/3.6/library/multiprocessing.html#exchanging-objects-between-processes
具體來看一下Queue
。 任何進程都可以將消息推送到隊列中或從隊列中彈出消息。 因此,例如,父母可以執行任務,孩子可以等待任務,並以先到先得的方式獲得任務。 如果一個孩子正忙於完成該任務,則下一個孩子會接受。
例如,如果您需要子進程來處理父進程獲取的數據,則可能會有以下內容:
from multiprocessing import Process, Queue
def do_thing(q):
data = q.get() # Get data queued by the parent process
# do something with data
if __name__ == '__main__':
q = Queue()
p = Process(target=do_thing, args=(q,))
p.start()
while True:
data = get_data_from_server()
q.put(data) # Queue data for a child server
如果您想要更基本的東西,可以使用Pipe
,它允許在進程之間進行雙向數據傳輸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.