python多程序與zeromq

2021-08-17 08:16:43 字數 1454 閱讀 5476

以下使用了push/pull模型

import zmq

import multiprocessing

class

dataserver

(object):

_instance = none

def__new__

(cls, *args, **kwargs):

ifnot cls._instance:

cls._instance = super(dataserver, cls).__new__(cls, *args, **kwargs)

return cls._instance

def__init__

(self):

self.context = zmq.context()

self.pull_server = self.context.socket(zmq.pull)

defstart

(self):

self.pull_server.bind("tcp://*:5555")

while

true:

print

"receiving..."

data = self.pull_server

print data

if __name__ == "__main__":

pull_instance = dataserver()

p = multiproessing.process(target=pull_instance.start, args=())

p.start()

客戶端**:

import zmq

context = zmq.context()

client = context.socket(zmq.push)

client.connect("tcp://localhost:5555")

client.send("hello world")

在此時,服務端啟動後,使用客戶端傳送資料,服務端沒有列印,但是埠測試是通的。另外,cpu利用率會飆到100%。

如果將服務端的初始化函式改為:

def

__init__

(self):

self.context = zmq.context()

defstart

(self):

self.pull_server = self.context.socket(zmq.pull)

self.pull_server.bind("tcp://*:5555")

while

true:

...

此時,服務端可以正常接收和處理資料

目前原因不明,在進行程序fork的過程與zmq的socket例項生成之間到底發生了什麼故事。

有興趣可以討論

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

Python 多程序與程序池

fork方法是呼叫一次,返回兩次,原因在於作業系統將當前程序 父程序 複製出乙份程序 子程序 這兩個程序幾乎完全相同,於是fork方法分別在父程序和子程序中返回。子程序中永遠返回0,父程序中返回的是子程序的id。importos if name main print current process ...

python多程序 Python多程序實踐

建立程序方式如下 可以通過lock鎖機制實現共享鎖,但比較常用的方式還是以上這些方式,效率更高,更安全。使用方式 構造 類方法 使用方式 構造 更多型別支援一般使用manager,支援的型別包括list,dict,namespace,lock,rlock,semaphore,boundedsemap...