同步方法之间的通信
communication between synchronized methods
我有 2 个进程,发起者和响应者,它们应该并行工作并在彼此之间重复发送和接收值(值在循环中修改)(请参见简化代码示例:
def initiatior():
for i in range(0, _passes):
_permutations.append(newPermutation(n))
with _lock:
pubCon.send(_permutations[i])
pass
def responder():
for i in range(0, _passes):
with _lock:
_permutations[i] = pubCon.receive()
pass
我想将发起者创建的排列发送给响应者,以便能够根据收到的每个排列做一些进一步的处理
Multiprocessing 具有在不同解释器(进程)之间进行通信的功能
Link: https://docs.python.org/2/library/multiprocessing.html#multiprocessing-listeners-clients
文档中的示例 - 使用此示例应该很容易在您的进程之间架起桥梁:
警告:python 3 和 2
的语法略有不同
听众:
from multiprocessing.connection import Listener
from array import array
address = ('localhost', 6000) # family is deduced to be 'AF_INET'
listener = Listener(address, authkey='secret password')
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
conn.send([2.25, None, 'junk', float])
conn.send_bytes('hello')
conn.send_bytes(array('i', [42, 1729]))
conn.close()
listener.close()
客户
from multiprocessing.connection import Client
from array import array
address = ('localhost', 6000)
conn = Client(address, authkey='secret password')
print conn.recv() # => [2.25, None, 'junk', float]
print conn.recv_bytes() # => 'hello'
arr = array('i', [0, 0, 0, 0, 0])
print conn.recv_bytes_into(arr) # => 8
print arr # => array('i', [42, 1729, 0, 0, 0])
conn.close()
编辑:
如果您只想在一个程序中的两个函数之间传递数据,您可以使用全局变量。
只需要定义函数外的变量即可。
示例:
my_list= []
def add_to_my_list(number):
my_list.append(number)
def sum_list():
print(sum(my_list))
>>> add_to_my_list(5)
>>> my_list
[5]
>>> sum_list()
5
>>> add_to_my_list(5)
>>> sum_list()
10
>>>
我有 2 个进程,发起者和响应者,它们应该并行工作并在彼此之间重复发送和接收值(值在循环中修改)(请参见简化代码示例:
def initiatior():
for i in range(0, _passes):
_permutations.append(newPermutation(n))
with _lock:
pubCon.send(_permutations[i])
pass
def responder():
for i in range(0, _passes):
with _lock:
_permutations[i] = pubCon.receive()
pass
我想将发起者创建的排列发送给响应者,以便能够根据收到的每个排列做一些进一步的处理
Multiprocessing 具有在不同解释器(进程)之间进行通信的功能
Link: https://docs.python.org/2/library/multiprocessing.html#multiprocessing-listeners-clients
文档中的示例 - 使用此示例应该很容易在您的进程之间架起桥梁:
警告:python 3 和 2
的语法略有不同听众:
from multiprocessing.connection import Listener
from array import array
address = ('localhost', 6000) # family is deduced to be 'AF_INET'
listener = Listener(address, authkey='secret password')
conn = listener.accept()
print 'connection accepted from', listener.last_accepted
conn.send([2.25, None, 'junk', float])
conn.send_bytes('hello')
conn.send_bytes(array('i', [42, 1729]))
conn.close()
listener.close()
客户
from multiprocessing.connection import Client
from array import array
address = ('localhost', 6000)
conn = Client(address, authkey='secret password')
print conn.recv() # => [2.25, None, 'junk', float]
print conn.recv_bytes() # => 'hello'
arr = array('i', [0, 0, 0, 0, 0])
print conn.recv_bytes_into(arr) # => 8
print arr # => array('i', [42, 1729, 0, 0, 0])
conn.close()
编辑: 如果您只想在一个程序中的两个函数之间传递数据,您可以使用全局变量。
只需要定义函数外的变量即可。
示例:
my_list= []
def add_to_my_list(number):
my_list.append(number)
def sum_list():
print(sum(my_list))
>>> add_to_my_list(5)
>>> my_list
[5]
>>> sum_list()
5
>>> add_to_my_list(5)
>>> sum_list()
10
>>>