Программа зависает при использовании Барьер Python - PullRequest
0 голосов
/ 19 октября 2018

Мне нужно синхронизировать мой поток, чтобы выполнять их одновременно, все это работает без барьера, но потоки выполняются на avg.2 в секунду, и мне нужно, чтобы по крайней мере 50-100 потоков выполнялось одновременно.

Когда я использую в своем коде Barrier, моя программа застревает как Dead Lock.

def Spin_Clients(self):
    def get_clients():
        self.connect_to_database1()
        self.get_message_from_client1()
    client_list = []
    barrier = Barrier(10)
    def send_messages():
        global MessageNumber
        global machineName
        global staffName
        timestamp = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
        logging.info("Thread {} working on something".format(threading.current_thread()))

        logging.info("Thread {} working on something1".format(threading.current_thread()))

        machineName = final_result[MessageNumber][0]
        logging.info("Thread {} working on something2".format(threading.current_thread()))

        staffName = staff_results[MessageNumber][0]
        logging.info("Thread {} working on something3".format(threading.current_thread()))
        MessageNumber += 1
        logging.info("Thread {} working on something4".format(threading.current_thread()))

        r = requests.post(
            "http://sampleurl"+ staffName + "&locationId=" + machineName)
        logging.info("Thread {} working on something5".format(threading.current_thread()))

        barrier.wait(timeout=5)
        logging.info("Response Code Should be 202: " + str(r.status_code) + " Time: " + timestamp)

        logging.info("Thread {} working on something6".format(threading.current_thread()))

    for i in range(10):
        t = Thread(target=send_messages(), args=(i,))
        t.start()
        logging.info("Message Sent to: " + staffName + " " + machineName)
    for thread in client_list:
        thread.join()

Iнужно отправить 50-100 запросов в секунду, как этого добиться, используя синхронизацию потока Python?

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

Согласно Комментарию после добавления таймаута и регистрации каждой строки, это то, что я получаю в результате

INFO    Thread <_MainThread(MainThread, started 68480)> working on something    
09:19:53.929    INFO    Thread <_MainThread(MainThread, started 68480)> working on something1   
09:19:53.929    INFO    Thread <_MainThread(MainThread, started 68480)> working on something2   
09:19:53.929    INFO    Thread <_MainThread(MainThread, started 68480)> working on something3   
09:19:53.929    INFO    Thread <_MainThread(MainThread, started 68480)> working on something4   
09:19:53.963    INFO    Thread <_MainThread(MainThread, started 68480)> working on something5   
09:19:58.964    FAIL    BrokenBarrierError

ОБНОВЛЕНИЕ 2:

Теперь я просто пытаюсь запустить простую нить печати, ноЯ все еще получаю BrokenBarrierError

def Spin_Clients(self, NumMessages):


    def get_clients():
        self.connect_to_database1()
        self.get_message_from_client1()
    client_list = []
    barrier = Barrier(10)

    def send_messages():

        logging.info("Thread {} Working on something".format(threading.current_thread()))
        logging.info("Thread {} I have Reached the barrier".format(threading.current_thread()))
        barrier.wait(timeout=10)
    for i in range(10):
        client_list.append(Thread(target=send_messages(), args=(i,)))
        client_list[].start()

    for thread in client_list:
        thread.join()
    print("All threads have finished")
...