Python启动多线程执行任务,用线程锁实现同步分配任务,最后等待所有线程执行完毕#python3多线程演示

import threading

import random

import time

total = 10 # 总任务次数

index = 0 # 索引

class myTask(threading.Thread):

def __init__(self, name):

threading.Thread.__init__(self)

#self.threadID = threadID

self.name = name

def run(self):

#默认线程运行入口

print("开始线程:" + self.name)

self.fenpei()

def fenpei(self):

global index #如果是只读该全局变量则不用global,这里涉及到修改(写)则需要

_index = 0

threadLock.acquire() # 获取锁,用于线程同步

index = index+1

_index = index

threadLock.release() # 释放锁,开启下一个线程

if (_index > total):

print("退出线程:" + self.name)

else:

self.zhixing(_index)

def zhixing(self,i):

delay = random.randint(1, 2)

time.sleep(delay) #如果不加延时,则会使下一个线程还没来得及启动就使得当前线程再次获取线程锁并运行,其他任务本耗时的时候就不用

print(self.name,i)

self.fenpei()

threadLock = threading.Lock()

thread1 = myTask("xiancheng1")

thread2 = myTask("xiancheng2")

thread3 = myTask("xiancheng3")

#启动线程

thread1.start()

thread2.start()

thread3.start()

# 添加线程到线程列表

threads = []

threads.append(thread1)

threads.append(thread2)

threads.append(thread3)

# 等待所有线程完成

for t in threads:

t.join() #主线程等待该子线程终止 或 抛出异常

print ("所有线程运行完毕")

运行效果截图:

python 线程锁_Python3多线程执行任务含线程同步锁相关推荐

  1. 【Python网络编程和并发-多线程共享数据混乱引出同步锁】

    38_第五章-多线程共享数据混乱引出同步锁 一.上节回顾 总结 在一个进程内的所有线程共享全局变量,能够在部使用其他方式的前提下完成多线程之间的数据共享(这点要比多进程更好) 缺点就是,线程对全局变量 ...

  2. python—多线程数据混乱问题解决之同步锁

    一.同步 问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全"". 同步:就是协同步调,按预定的先后 ...

  3. java线程释放_Java多线程出现异常会自动释放锁

    Java多线程出现异常会自动释放锁 package com.wkcto.intrinsiclock; /** * 同步过程中线程出现异常, 会自动释放锁对象 * * Author: 老崔 */ pub ...

  4. python在主线程上下文执行_python进线程

    1.进程.线程网络 1.1.进程 进程 : 进程就是程序在计算机中一次执行的过程.每一个进程提供执行程序所需的所有资源.(进程本质上是资源的集合) 一个进程有一个虚拟的地址空间.可执行的代码.操作系统 ...

  5. java 线程通讯_java多线程(五)线程通讯

    1.1. 为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信. 1.2. 线程通讯方式 线程间通信常用方式如下 ...

  6. terminated 线程_Java【多线程系列】JUC线程池—2. 原理(二)、Callable和Future

    在"Java多线程系列--"基础篇"01之 基本概念"中,我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而 ...

  7. java中什么是线程安全_Java 多线程:什么是线程安全性

    线程安全性 什么是线程安全性 <Java Concurrency In Practice>一书的作者 Brian Goetz 是这样描述"线程安全"的:"当多 ...

  8. 线程休眠 java_JAVA多线程07-基础篇-线程休眠sleep()

    本节摘要:sleep()功能介绍,sleep()用法示例 一.功能介绍 让当前线程(调用sleep()方法的线程)休息一会,即是让当前线程由运行状态进入到阻塞状态,进而使其他线程有机会继续执行任务.虽 ...

  9. Java线程池参数、执行流程及线程数配置建议

    1. 线程池参数详解 corePoolSize:线程池中常驻核心线程数: maximumPoolSize:线程池能够容纳同时执行的最大线程数: keepAliveTime:多余的空闲线程存活时间: u ...

最新文章

  1. Java的缓存使用-Ehcache
  2. 古典人像秒变3D,视角还能随意切,华为上交联手出品
  3. 死磕Java并发:Java内存模型之分析volatile
  4. ms 两个数组,从每个数组中取一个数相加,求最大的前k个和
  5. 在GridView中的批量删除!
  6. [LeetCode] Remove Duplicates from Sorted List - 链表问题
  7. [科技]Loj#6564-最长公共子序列【bitset】
  8. 第三讲 配置SCCM客户端并添加角色
  9. Pascal 语言中的关键字及保留字
  10. 详解JavaScript数组过滤相同元素的5种方法
  11. linux lvm的管理
  12. android ant下载安装,ANT+ Plugins
  13. SECS/GEM协议开发应用
  14. iec61508最新2020_功能安全IEC61508标准新旧版的对比.pdf
  15. MongoDB基本操作
  16. python之获取文件当前位置和定位某个位置
  17. Android实现网页动态背景“五彩蛛网”
  18. 安装独立的 Elastic Agents 并采集数据 - Elastic Stack 8.0
  19. 2017年总结及2018年规划
  20. ❀论文篇 ❀ 2010-2022,情绪识别(EmotionRecognition)论文

热门文章

  1. Makefile、.mk、.bp、Blueprint、Soong、kati工具链的关系
  2. Chrome默认开启flash
  3. 深入剖析Android音频之AudioPolicyService
  4. Mac安装Anaconda
  5. 安装双系统:Win7/Win10 + Ubuntu(亲测可用)
  6. Ubuntu下反编译apk源码查看
  7. 内存-ECC RDIMM 服务器内存条简介(常被叫做RECC内存条)
  8. 各种接口的硬盘在linux中的文件名
  9. Pycharm 转化ui文件为py文件:报错Error in input file: not well-formed (invalid token): line 1, column 1
  10. 修改mysql默认字符集为latin1_修改MYSQL默认编码为UTF8