2

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

我有一个 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)应该具有执行的额外效果 - 这functiondata如何实现的?

干杯!

4

1 回答 1

0

如果您特别尝试使用该multiprocessing模块,您可能应该考虑使用队列/管道。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来阻止守护进程使用 aget()和 send_message() 执行 aput()

于 2012-03-03T17:02:33.863 回答