Skip to main content
 首页 » 编程设计

Python:从类内部发送消息到进程

2025年05月04日6linjiqin

这个问题可能不清楚 - 如果是这样,那可能是因为我不完全确定如何提出这个问题 - 但这里有:

我有一个 Python 类,我想从中调用一个函数。

该类无权访问该函数应操作的数据 - 基本上,我希望该类向调用该函数的另一个进程发送消息。像这样的东西:

from multiprocessing import Process 
 
class Foo(): 
   def bar(phonenumber): 
      do_something() 
      send_message(phonenumber) 
 
def daemon(data, phonenumber): 
   while nothing_receivied(phonenumber): 
      do_nothin() 
      also_do_not_consume_too_much_CPU() 
   if message_received(phonenumber): 
      function(data) 
 
p = Process(target=daemon, args=(data, phonenumber)) 
p.start() 
p.join() 

调用 Foo.bar(phonenumber) 应该会产生额外的效果,即 function 是在 data 上执行的 - 这是如何实现的?

干杯!

请您参考如下方法:

如果您特别尝试使用 multiprocessing 模块,您可能应该考虑使用 Queue/Pipe。 http://docs.python.org/library/multiprocessing.html#pipes-and-queues

守护程序代码中您想坐下来什么都不做而又不消耗太多 CPU 的部分是它会尝试从队列中获取项目,或轮询管道以获取数据并阻塞直到准备就绪.队列或管道的另一端会简单地将数据放入队列中,以填补您的 send_message 概念的角色。

如果您想要更健壮的异步解决方案,您还应该查看 Twisted 库:http://twistedmatrix.com/trac/

这将允许您在更高级别定义一个服务,该服务具有一个带有处理程序的事件循环来处理传入的连接。

最后,如果您只想要一个简单的解决方案,所有这些都在同一个脚本中,而不是任何基于网络的解决方案,您可以轻松地使用线程模块:http://docs.python.org/library/threading.html .并使用 Queue.Queue守护进程使用 get() 阻塞,send_message() 执行 put()