Python多线程编程之多线程加锁操作示例
本文实例讲述了Python多线程编程之多线程加锁操作。分享给大家供大家参考,具体如下:
Python语言本身是支持多线程的,不像PHP语言。
下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。
# -*- coding:utf-8 -*- #! python2 import threading start_task = 0 task_num = 10000 mu = threading.Lock() ###通过工厂方法获取一个新的锁对象 class MyThread(threading.Thread): ###类MyThread继承基类threading.Thread def run(self): ##线程启动的入口函数,子类需重写 global start_task global mu global start_task while start_task < task_num: ##如果任务没有完成,则继续 if mu.acquire(): ##加锁 if start_task < task_num: print start_task start_task = start_task + 1 mu.release() ##释放锁 def test(): thread_all = [] for i in range(6): ##for循环创建6个线程 t = MyThread() ##创建线程 thread_all.append(t) t.start() ###启动线程 for i in range(6): thread_all[i].join() ##等待线程结束 if __name__ == "__main__": test()
运行上述代码,则输出1~9999
测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
相关推荐
-
python多线程操作实例
一.python多线程 因为CPython的实现使用了Global Interpereter Lock(GIL),使得python中同一时刻只有一个线程在执行,从而简化了python解释器的实现,且python对象模型天然地线程安全.如果你想你的应用程序在多核的机器上使用更好的资源,建议使用multiprocessing或concurrent.futures.processpoolexecutor.但是如果你的程序是IO密集型,则使用线程仍然是很好的选择. 二.python多线程使用的两种方法
-
Python基于多线程操作数据库相关问题分析
本文实例分析了Python多线程操作数据库相关问题.分享给大家供大家参考,具体如下: python多线程并发操作数据库,会存在链接数据库超时.数据库连接丢失.数据库操作超时等问题. 解决方法:使用数据库连接池,并且每次操作都从数据库连接池获取数据库操作句柄,操作完关闭连接返回数据库连接池. *连接数据库需要设置charset = 'utf8', use_unicode = True,不然会报中文乱码问题 *网上说解决python多线程并发操作数据库问题,连接时使用self.conn.ping(T
-
Python mutiprocessing多线程池pool操作示例
本文实例讲述了Python mutiprocessing多线程池pool操作.分享给大家供大家参考,具体如下: python - mutiprocessing 多线程 pool 脚本代码: root@72132server:~/python/multiprocess# ls multiprocess_pool.py multprocess.py root@72132server:~/python/multiprocess# cat multiprocess_pool.py #!/usr/bin/
-
python程序中的线程操作 concurrent模块使用详解
一.concurrent模块的介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 ProcessPoolExecutor:进程池,提供异步调用 ProcessPoolExecutor 和 ThreadPoolExecutor:两者都实现相同的接口,该接口由抽象Executor类定义. 二.基本方法 submit(fn, *args, **kwargs) :异步提交任务 map(func, *iterables,
-
Python多线程应用于自动化测试操作示例
本文实例讲述了Python多线程应用于自动化测试操作.分享给大家供大家参考,具体如下: 多线程执行测试用例 实例: import threading from time import sleep,ctime from selenium import webdriver #测试用例1 def test_baidu(browser,search): print("开始,现在时间是%s"%ctime()) print("浏览器是%s"%browser) if browse
-
Python3多线程操作简单示例
本文实例讲述了Python3多线程操作.分享给大家供大家参考,具体如下: python3 线程中常用的两个模块为: _thread threading(推荐使用) thread 模块已被废弃.用户可以使用 threading 模块代替.所以,在 python3 中不能再使用"thread" 模块.为了兼容性,python3 将 thread 重命名为 "_thread". test.py # -*- coding:utf-8 -*- #!/usr/bin/pytho
-
Python多线程和队列操作实例
Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端 复制代码 代码如下: #! /usr/bin/env python3 import time import threading import queue # 一个线程,间隔一定的时间,把一个递增的数字写入队列 # 生产者 class Producer(threading.Thread): def __init__(self, work_queue): super().__in
-
Python多线程编程之多线程加锁操作示例
本文实例讲述了Python多线程编程之多线程加锁操作.分享给大家供大家参考,具体如下: Python语言本身是支持多线程的,不像PHP语言. 下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止. # -*- coding:utf-8 -*- #! python2 import threading start_task = 0 task_num = 10000 mu = threading.Lock() ###通
-
Python网络编程基于多线程实现多用户全双工聊天功能示例
本文实例讲述了Python网络编程基于多线程实现多用户全双工聊天功能.分享给大家供大家参考,具体如下: 在前面一篇<Python网络编程使用select实现socket全双工异步通信功能>中,我们实现了1对1的异步通信,在文章结尾,给出了多对多通信的思路. 既然说了,咱就动手试一试,本次用的是多线程来实现,正好练练手- 首先讲一下思路: 我们将服务器做为中转站来处理信息,一方面与客户端互动,另一方面进行消息转发. 大体思路确定下来后,需要确定一些通信规则: 1. 客户端与服务器建立连接后,需要
-
Python并发编程多进程,多线程及GIL全局解释器锁
目录 1. 并发与并行 2. 线程与进程的应用场景 2.1. 并行/并发编程相关的技术栈 3. Python中的GIL是什么,它影响什么 1. 并发与并行 所谓的并行(Parallelism),就是多个彼此独立的任务可以同时一起执行,彼此并不相互干扰,并行强调的是同时且独立的运行,彼此不需要协作. 而所谓并发(Concurrency),则是多个任务彼此交替执行,但是同一时间只能有一个处于运行状态,并发执行强调任务之间的彼此协作. 并发通常被误解为并行,并发实际是隐式的调度独立的代码,以协作的方式
-
python实现与Oracle数据库交互操作示例
目录 1.安装准备 2.instantclient的安装说明 3.instantclient安装步骤 4.还有几个需要注意的地方 1)设置NLS_LANG环境变量:解决中文乱码 2)关于TNS_ADMIN环境变量的说明 3)关于python中,cx_Oracle驱动包的安装 5.python操作Oracle数据库 1)python连接数据库的3种方式 2)查询数据-查 1.安装准备 ① 正确安装好Oracle数据库(我的电脑是64位的,但是我最开始安装的是Oracle32.因此,你要是有64位的
-
Python opencv应用实现图片切分操作示例
目录 说明 操作说明 代码 切换效果 说明 之前下载来zip包的漫画,里面的图片都是两张一起的: 但是某些漫画查看软件不支持自动分屏,看起来会比较不舒服,所以只能自己动手来切分. 操作说明 Python有不少的库支持图片操作,其中比较著名的一个是OpenCV. OpenCV是一个跨平台的计算机视觉库,Python下有它的接口实现. Python默认不带OpenCV,所以需要先用pip下载: OpenCV功能强大,这里用来做图片的切分其实是牛刀小试. 关于OpenCV的功能,这里不多介绍,有兴趣的
-
python网络编程之多线程同时接受和发送
本文实例为大家分享了python多线程同时接受和发的具体代码,供大家参考,具体内容如下 ''' 模仿qq 同时可以发送信息和接受信息多线程 ''' from socket import * from time import sleep import threading # 负责接收数据 def recvData(): udpRecvSocket = socket(AF_INET,SOCK_DGRAM) # 默认使用8080端口 myRecvPort = 8080 bindAddr = ('',8
-
Python实现的tcp端口检测操作示例
本文实例讲述了Python实现的tcp端口检测操作.分享给大家供大家参考,具体如下: # coding=utf-8 import sys import socket import re def check_server(address, port): s = socket.socket() print 'Attempting to connect to %s on port %s' % (address, port) try: s.connect((address, port)) print '
-
Python读写及备份oracle数据库操作示例
本文实例讲述了Python读写及备份oracle数据库操作.分享给大家供大家参考,具体如下: 最近项目中需要用到Python调用oracle实现读写操作,踩过很多坑,历尽艰辛终于实现了.性能怎样先不说,有方法后面再调优嘛.现在把代码和注意点记录一下. 1. 所需Python工具库 cx_Oracle,pandas,可以使用通过控制台使用pip进行安装(电脑中已经安装) 2. 实现查询操作 #工具库导入 import pandas as pd import cx_Oracle # 注:设置环境编码
-
python使用 cx_Oracle 模块进行查询操作示例
本文实例讲述了python使用 cx_Oracle 模块进行查询操作.分享给大家供大家参考,具体如下: # !/usr/bin/env python # -*- coding: utf-8 -*- import cx_Oracle from pprint import pprint import csv import time import re import binascii print time.ctime() try: conn = cx_Oracle.connect('tlcbuser/
-
Python实现的排列组合计算操作示例
本文实例讲述了Python实现的排列组合计算操作.分享给大家供大家参考,具体如下: 1. 调用 scipy 计算排列组合的具体数值 >> from scipy.special import comb, perm >> perm(3, 2) 6.0 >> comb(3, 2) 3.0 2. 调用 itertools 获取排列组合的全部情况数 >> from itertools import combinations, permutations >>
随机推荐
- DOS命令初学者基础知识学习
- JQuery遍历json数组的3种方法
- 在Node.js应用中读写Redis数据库的简单方法
- Python基于正则表达式实现文件内容替换的方法
- javascript几个易错点记录
- 老生常谈PHP数组函数array_merge(必看篇)
- Python中字符编码简介、方法及使用建议
- ASP 千万级数据分页的存储过程
- MySQL笔记之数据类型详解
- javascript 改变字体大小方法集合 原创
- node中socket.io的事件使用详解
- jQuery之动画ajax事件(实例讲解)
- ruby 简单例子
- Win2008 远程控制安全设置技巧
- sql server建库、建表、建约束技巧
- jQuery Ajax请求状态管理器打包
- 基于jquery的simpleValidate简易验证插件
- 理解javascript中的with关键字
- 教你在header中隐藏php的版本信息
- JS判定是否原生方法