python 线程安全的数据类型_Python多线程一览

【前言】最近一段时间在学习使用Python进行异步编程,与C++、Java等编译型语言类型类似,Python也提供了一些可用于异步编程的内建模块。例如,支持多线程处理的若处理的任务属于CPU密集型,则应使用多进程;若处理的任务属于I/O密集型,则应使用多线程。本文着重介绍使用Python多线程进行异步编程,以后有时间的话,会另写一篇使用Python多进程进行异步编程的文章。

本篇文章也假设读者已经明白“阻塞”、“异步”、“锁”等术语背后的基本原理,本篇文章的所有示例均基于threading 模块。

本篇文章的解释内容包括:创建线程

线程锁

关闭/中断线程

基于线程实现取消服务。

【创建线程】Python中可通过调用threading.Thread直接创建线程,如下所示,调用threading.Thread通常需要传入两个参数:target为“线程函数”;args为传递给“线程函数”的参数,必须为tuple类型。

import threading

def worker(name):

print("thread%sis running" % name)

worker = threading.Thread(target=worker, args=('worker',))

worker.start()

worker.join()也可通过继承threading.Thread类创建线程,如下所示。其中super(MyThread, self).__init__()表示对继承自父类(threading.Thread)的属性进行初始化,并用父类的初始化方法来初始化继承的属性。此外,继承自threading.Thread类的子类必须具有run()方法。线程启动时,自动调用每个线程实例的run()方法。

import threading

import time

class MyThread(threading.Thread):

def __init__(self, delay):

super(MyThread, self).__init__()

self.delay = delay

def run(self):

while True:

print("sleep%ds" % self.delay)

time.sleep(self.delay)

delays = [2, 4, 6]

threads = []

for delay in delays:

threads.append(MyThread(delay))

for t in threads:

t.start()

for t in threads:

t.join()

运行结果如下所示

如果多个线程同时对某个资源进行“写操作”,则可能会出现不可预料的结果。考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值