1

У меня этот код реализован в Python3 с использованием барьеров. Я хочу, чтобы получить такую ​​же функциональность в python2.7, но я не знаю, какой примитив синхронизации для использования в качестве барьеров не существует в python2.7Реализация барьера в Python2.7

import threading 
import time 
from threading import Thread,Barrier 

b = Barrier(2, timeout=50) 

def func1(): 
    time.sleep(3) 
    b.wait() 
    print('Working from func1') 
    return 

def func2(): 
    time.sleep(5) 
    b.wait() 
    print('Working from func2') 
    return 

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start() 

ответ

3

Вы можете имитировать барьер семафоров. Взгляните: Implementing an N process barrier using semaphores

Проблема заключается в том, что она не имеет параметров тайм-аута, возможно, используя условия ...

import time 
from threading import Thread,Semaphore 

class Barrier: 
    def __init__(self, n): 
     self.n = n 
     self.count = 0 
     self.mutex = Semaphore(1) 
     self.barrier = Semaphore(0) 

    def wait(self): 
     self.mutex.acquire() 
     self.count = self.count + 1 
     self.mutex.release() 
     if self.count == self.n: self.barrier.release() 
     self.barrier.acquire() 
     self.barrier.release() 

b = Barrier(2) 

def func1(): 
    time.sleep(3) 
    # 
    b.wait() 
    # 
    print('Working from func1') 
    return 

def func2(): 
    time.sleep(5) 
    # 
    b.wait() 
    # 
    print('Working from func2') 
    return  

if __name__ == '__main__': 
    Thread(target = func1).start() 
    Thread(target = func2).start()  
Смежные вопросы