python的threading库_python标准库介绍——31 threading 模块详解

本文介绍了Python的`threading`模块,它提供了一个高级接口来处理线程。通过创建Thread类的子类并定义`run`方法,可以轻松创建新线程。示例代码展示了如何使用Lock对象确保全局Counter对象的线程安全。此外,还提及了time、random和sys等其他模块的功能。
摘要由CSDN通过智能技术生成

threading 模块

(可选) ``threading`` 模块为线程提供了一个高级接口, 如 [Example 3-1 #eg-3-1] 所示.

它源自 Java 的线程实现. 和低级的 ``thread`` 模块相同, 只有你在编译解释器时打开了线程支持才可以使用它 .

你只需要继承 //Thread// 类, 定义好 ``run`` 方法, 就可以创建一 个新的线程.

使用时首先创建该类的一个或多个实例, 然后调用 ``start`` 方法. 这样每个实例的

``run`` 方法都会运行在它自的线程里.

====Example 3-1. 使用 threading 模块====[eg-3-1]

```

File: threading-example-1.py

import threading

import time, random

class Counter:

def _ _init_ _(self):

self.lock = threading.Lock()

self.value = 0

def increment(self):

self.lock.acquire() # critical section

self.value = value = self.value + 1

self.lock.release()

return value

counter = Counter()

class Worker(threading.Thread):

def run(self):

for i in range(10):

# pretend we're doing something that takes 10?00 ms

value = counter.increment() # increment global counter

time.sleep(random.randint(10, 100) / 1000.0)

print self.getName(), "-- task", i, "finished", value

#

# try it

for i in range(10):

Worker().start() # start a worker

*B*Thread-1 -- task 0 finished 1

Thread-3 -- task 0 finished 3

Thread-7 -- task 0 finished 8

Thread-1 -- task 1 finished 7

Thread-4 -- task 0 Thread-5 -- task 0 finished 4

finished 5

Thread-8 -- task 0 Thread-6 -- task 0 finished 9

finished 6

...

Thread-6 -- task 9 finished 98

Thread-4 -- task 9 finished 99

Thread-9 -- task 9 finished 100*b*

```

[Example 3-1 #eg-3-1] 使用了 //Lock// 对象来在全局 //Counter// 对象里创建临界区

(critical section). 如果删除了 ``acquire`` 和 ``release`` 语句, 那么 ``Counter`` 很可能不会到达 100.

python标准库介绍——12 time 模块详解

==time 模块== ``time`` 模块提供了一些处理日期和一天内时间的函数. 它是建立在 C 运行时库的简单封装. 给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 ...

python标准库介绍——27 random 模块详解

==random 模块== "Anyone who considers arithmetical methods of producing random digits is, of cour ...

python标准库介绍——10 sys 模块详解

==sys 模块== ``sys`` 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分. === 处理命令行参数=== 在解释器启动后, ``argv`` 列表包含了传递给脚本的所有 ...

python标准库介绍——33 thread 模块详解

?==thread 模块== (可选) ``thread`` 模块提为线程提供了一个低级 (low_level) 的接口, 如 [Example 3-6 #eg-3-6] 所示. 只有你在编译解释器时 ...

python标准库介绍——30 code 模块详解

==code 模块== ``code`` 模块提供了一些用于模拟标准交互解释器行为的函数. ``compile_command`` 与内建 ``compile`` 函数行为相似, 但它会通过测试来保证 ...

python标准库介绍——8 operator 模块详解

==operator 模块== ``operator`` 模块为 Python 提供了一个 "功能性" 的标准操作符接口. 当使用 ``map`` 以及 ``filter`` 一类 ...

python标准库介绍——36 popen2 模块详解

==popen2 模块== ``popen2`` 模块允许你执行外部命令, 并通过流来分别访问它的 ``stdin`` 和 ``stdout`` ( 可能还有 ``stderr`` ). 在 pyth ...

python标准库介绍——32 Queue 模块详解

Queue 模块 ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示. 你可以通过它在多个线程里安全访问同个对象. ==== ...

python标准库介绍——23 UserString 模块详解

==UserString 模块== (2.0 新增) ``UserString`` 模块包含两个类, //UserString// 和 //MutableString// . 前者是对标准字符串类型的 ...

随机推荐

上传文件fileupload

文件上传: 需要使用控件-fileupload 1.如何判断是否选中文件? FileUpload.FileName -  选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.va ...

XStream的例子

写个小例子,方便以后复习: 1 package com.demo; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 impor ...

【题解】【BT】【Leetcode】Populating Next Right Pointers in Each Node

Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

C语言系列之printf和%12d的用法(三)

看C语言程序的时候,往往会遇到printf函数输出,在此,我想总结一下printf的一般用法以及%12d是什么意思 printf函数的一般格式为 printf(格式控制,输出列表): 例如: prin ...

8_python连接数据库

如何用python操作数据库? -- 导入pymysql                    -- import pymysql -- 创建连接                          - ...

C++常见笔试题

1.实现字符串转整数的函数:int atoi(const char *nptr) 2.实现数组折半查找:int BinarySearch(int a[],int len, int key) 3.实现字 ...

单调栈的运用-bzoj1012(代码转载-http://hzwer.com/1130.html)

Description 现在请求你维护一个数列,要求提供以下两种操作: . 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. . 插 ...

IDEA导出jar包后运行报错 找不到或无法加载主类

开发工具:IDEA16 运行环境:ubuntu 问题:根据网上的Idea导出jar包的方法,将我的项目导出jar包后运行报错:找不到或无法加载主类.   为了找到这个原因,我重新搭建了一个测试例子,在 ...

Business Unit Helper

using System; using System.Linq; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Sy ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值