这个问题可能不清楚 - 如果是这样,那可能是因为我不完全确定如何提出这个问题 - 但这里有:
我有一个 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()
