Detailed explanation of the use of Event in Python multi-threading

不言
Release: 2018-04-27 09:59:24
Original
2645 people have browsed it

This article mainly introduces the detailed explanation of the use of python multi-threaded events. Now I will share it with you and give you a reference. Come and have a look together

Preface

Friends a, b, and c gathered around to eat hot pot. When the dishes were served, it was a treat. The host said: Let’s eat! , so the friends move chopsticks together, how to realize this scenario

Event (event)

Event (event): event processing mechanism: a built-in event is globally defined Flag Flag, if the Flag value is False, then the program will block when executing the event.wait method. If the Flag value is True, then the event.wait method will no longer block.

Event is actually a simplified version of Condition. Event does not have a lock and cannot cause the thread to enter a synchronous blocking state.

Event()

  1. set(): Set the flag to True and notify all threads in the waiting blocked state to resume running.

  2. clear(): Set the flag to False.

  3. wait(timeout): If the flag is True, it will return immediately, otherwise the thread will be blocked in the waiting blocking state and wait for other threads to call set().

  4. isSet(): Gets the built-in flag status and returns True or False.

Event Case 1

Scenario: Friends a and b are ready, when they receive the notification event.set (), threads a and b will be executed

# coding:utf-8

import threading
import time

event = threading.Event()


def chihuoguo(name):
  # 等待事件,进入等待阻塞状态
  print '%s 已经启动' % threading.currentThread().getName()
  print '小伙伴 %s 已经进入就餐状态!'%name
  time.sleep(1)
  event.wait()
  # 收到事件后进入运行状态
  print '%s 收到通知了.' % threading.currentThread().getName()
  print '小伙伴 %s 开始吃咯!'%name

# 设置线程组
threads = []

# 创建新线程
thread1 = threading.Thread(target=chihuoguo, args=("a", ))
thread2 = threading.Thread(target=chihuoguo, args=("b", ))

# 添加到线程组
threads.append(thread1)
threads.append(thread2)

# 开启线程
for thread in threads:
  thread.start()

time.sleep(0.1)
# 发送事件通知
print '主线程通知小伙伴开吃咯!'
event.set()
Copy after login

Running result:

Thread- 1 Already started
Friend a has entered the dining state!
Thread-2 has been started
Little friend b has entered the dining state!
The main thread notifies friends to start eating!
Thread-1 Received the notification.
Friend a, start eating!
Thread-2 I received the notification.
Little friend b starts eating!

Event Case 2

Scenario: After friends a, b, and c have gathered, the person who invited the guests said: Open Eat it!

# coding:utf-8

import threading
import time

event = threading.Event()


def chiHuoGuo(name):
  # 等待事件,进入等待阻塞状态
  print '%s 已经启动' % threading.currentThread().getName()
  print '小伙伴 %s 已经进入就餐状态!'%name
  time.sleep(1)
  event.wait()
  # 收到事件后进入运行状态
  print '%s 收到通知了.' % threading.currentThread().getName()
  print '%s 小伙伴 %s 开始吃咯!'%(time.time(), name)


class myThread (threading.Thread):  # 继承父类threading.Thread
  def __init__(self, name):
    '''重写threading.Thread初始化内容'''
    threading.Thread.__init__(self)

    self.people = name

  def run(self):  # 把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
    '''重写run方法'''

    chiHuoGuo(self.people)   # 执行任务
    print("qq交流群:226296743")
    print("结束线程: %s" % threading.currentThread().getName())

# 设置线程组
threads = []
# 创建新线程
thread1 = myThread("a")
thread2 = myThread("b")
thread3 = myThread("c")

# 添加到线程组
threads.append(thread1)
threads.append(thread2)
threads.append(thread3)

# 开启线程
for thread in threads:
  thread.start()

time.sleep(0.1)
# 发送事件通知
print '集合完毕,人员到齐了,开吃咯!'
event.set()
Copy after login

Run result:

Thread-1 has been started
Partner a has entered Dining status!
Thread-2 has been started
Little friend b has entered the dining state!
Thread-3 has been started
Little friend c has entered the dining state!
The gathering is complete, everyone is here, let’s eat!
Thread-1 Received the notification.
1516780957.47 Friend a, start eating!
qq communication group: 226296743
Ended thread: Thread-1
Thread-3 Received the notification.
1516780957.47 Little friend c starts eating! Thread-2 has received the notification.
qq communication group: 226296743

1516780957.47 Friend b, start eating! End thread: Thread-3

qq exchange group: 226296743
End thread: Thread-2

Related recommendations:

Implementation of python thread pool threadpool

The above is the detailed content of Detailed explanation of the use of Event in Python multi-threading. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template