python多模块之间调用_Python多处理模块:在进程中调用实例方法

基于Python的多处理模块,我需要执行以下操作:

-创建一个持续运行的进程,该进程可以被特定事件中断。在

-在此过程中,从客户端接收消息,并将此消息传递给对象实例的handler方法。在

基本代码如下(省略了一些细节)。问题是我试图调用实例方法(自行注册(消息),但正如预期的那样没有效果。我知道原因-进程使用自己的内存等等-我已经实现了Can't pickle when using python's multiprocessing Pool.map()中提出的解决方案,用于解决酸洗有界方法的问题,并尝试了使用管理器、队列、池的不同方法。。。我决定把我的意图尽可能的理解。欢迎任何帮助。在class DistManager:

def __init__(self, name, network_address, password):

self.name = name

self.network_address = network_address

self.password = password

self.distribution_clients = {}

def _run_distribution_process(self):

import select

while not self.should_stop_distribution_service.is_set():

(sread, swrite, sexc) = select.select([self.distribution_listener], [], [], 0)

if (sread):

connection = self.distribution_listener.accept()

serialized_message = connection.recv() # currently only receiving

connection.close()

message = pickle.loads(serialized_message)

self.enroll(message) # THE PROBLEM IS HERE

def start_distribution_service(self, distribution_port):

self.distribution_port = distribution_port

# patch for making Listener work with select.select during run

Listener.fileno = lambda self: self._listener._socket.fileno()

self.distribution_listener = Listener(address=(self.network_address, self.distribution_port),

authkey=self.password)

self.should_stop_distribution_service = Event()

self.distribution_process = Process(name='Distribution Runner', target=self._run_distribution_process)

self.distribution_process.daemon = True

self.distribution_process.start()

def stop_distribution_service(self):

from time import sleep

self.should_stop_distribution_service.set()

sleep(1)

self.distribution_listener.close()

self.distribution_process.terminate()

return self.distribution_process.exitcode

def _enroll_distribution_client(self, identifier, network_address, phone_number):

self.distribution_clients[identifier] = (network_address, phone_number)

def enroll(self, message):

if type(message.content) is tuple:

self._enroll_distribution_client(message.generator_identifier, message.content[0], message.content[1])

else:

raise TypeError("Tuple expected")

return message.code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值