Как синхронизировать потоки в Python? - PullRequest
2 голосов
/ 15 ноября 2011

У меня есть два потока в Python (2.7).Я запускаю их в начале моей программы.Пока они выполняются, моя программа достигает конца и завершается, убивая оба моих потока, прежде чем ждать разрешения.

Я пытаюсь выяснить, как дождаться завершения обоих потоков, прежде чем выйти.1004 *

В .NET я бы использовал что-то вроде WaitAll (), но я не нашел эквивалент в Python.В моем сценарии TelnetClient - это длительная операция, которая может привести к сбою после истечения времени ожидания.

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

Thread подразумевается как примитивный интерфейс нижнего уровня для механизма потоков Python - используйте threading. Затем вы можете использовать threading.join() для синхронизации потоков.

Другие потоки могут вызывать метод join () потока. Это блокирует вызывающий поток, пока поток, чей метод join () не будет вызван прекращено.

3 голосов
/ 15 ноября 2011

Yoo может сделать что-то подобное:

import threading

class connect_cam(threading.Thread):

    def __init__(self, ip, execute_lock):
        threading.Thread.__init__(self)
        self.ip = ip
        self.execute_lock = execute_lock

    def run(self):
        try:
            conn = TelnetConnection.TelnetClient(self.ip)
            self.execute_lock.acquire()
            ExecuteUpdate(conn, self.ip)
            self.execute_lock.release()
        except ValueError:
            pass


execute_lock = thread.allocate_lock()
tr1 = connect_cam(headset_ip, execute_lock)
tr2 = connect_cam(handcam_ip, execute_lock)
tr1.start()
tr2.start()
tr1.join()
tr2.join()

С помощью метода .join () два потока (tr1 и tr2) будут ожидать друг друга.

2 голосов
/ 15 ноября 2011

Во-первых, вы должны использовать модуль threading , а не модуль thread.Далее, ваш основной поток join () другие темы.

...