связь между синхронизированными методами - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть 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 

Я хочу отправить перестановку, созданную инициатором, респонденту, чтобы иметь возможность выполнить дальнейшую обработку на основе каждой полученной перестановки

1 Ответ

0 голосов
/ 26 декабря 2018

Мультипроцессор имеет функцию для связи между различными интерпретаторами (процессами)

Ссылка: 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
>>>
...