python自动化--语言基础线程、生产者消费者示例

进程与线程的区别:进程不共享空间,线程共享地址空间

线程共享空间优缺点:优点:多线程给用户的体验好些,处理速度快些缺点:共享地址空间相互影响
 1 import threading
 2 import time
 3
 4 class Mythreading(threading.Thread):
 5     def __init__(self,threadID,name,counter):
 6         threading.Thread.__init__(self)    #固定格式
 7         self.threadID = threadID
 8         self.name = name
 9         self.counter = counter
10         print("初始化完成")
11     def run(self):                         #由cpu来处理决定线程间的执行顺序
12         print("开始"+self.name)
13         print_time(self.name,self.counter,5)
14         print("结束"+self.name)
15
16 def print_time(threasName,counter,delay):
17     while counter:
18         time.sleep(delay)
19         print("%s:%s"%(threasName,time.ctime(time.time())))
20         counter -= 1
21
22 #创建线程
23 thread1 = Mythreading(1,"thread1",1)
24 thread2 = Mythreading(2,"thread2",2)
25
26 #开启线程
27 thread1.start()
28 thread2.start()
 1 import threading
 2 import time
 3
 4 class Mythreading(threading.Thread):
 5     def __init__(self,threadID,name,counter):
 6         threading.Thread.__init__(self)    #固定格式
 7         self.threadID = threadID
 8         self.name = name
 9         self.counter = counter
10         print("初始化完成")
11     def run(self):                         #由cpu来处理决定线程间的执行顺序
12         threadLock.acquire()               #获得锁,成功获得锁定后返回True,可选的参数timeout不填时将一直阻塞直到获得锁定
13         print_time(self.name,self.counter,3)
14         threadLock.release()               #释放锁,开始下一个线程
15
16 def print_time(threasName,counter,delay):
17     while counter:
18         time.sleep(delay)
19         print("%s:%s"%(threasName,time.ctime(time.time())))
20         counter -= 1
21
22 threadLock = threading.Lock()
23 threads = []
24
25 #创建线程
26 thread1 = Mythreading(1,"thread1",1)
27 thread2 = Mythreading(2,"thread2",2)
28
29 #开启线程
30 thread1.start()
31 thread2.start()
32
33 # thread1.join()
34 # thread2.join()
35 threads.append(thread1)
36 threads.append(thread2)
37 for t in threads:
38     t.join()       #后边的代码必须等待,等线程运行完成才会往后运行代码
39
40 print("我的的花儿也谢了")

生产者与消费者示例:

 1 import threading
 2 class Produce(threading.Thread):
 3
 4     def __init__(self,name):
 5         threading.Thread.__init__(self)
 6         self.name = name
 7     def run(self):
 8         global x
 9         tt.acquire()
10         if x > 0 :
11
12             print("我不生产了")
13         else:
14             for i in range(5):
15                 x += 1
16                 print("%s在生产中,第%d个"%(self.name,x))
17         tt.release()
18
19 class Consume(threading.Thread):
20     def __init__(self,name):
21         threading.Thread.__init__(self)
22         self.name = name
23     def run(self):
24         global x
25         tt.acquire()
26         if x == 0:
27
28             print("我不消费了")
29         else:
30             for i in range(5):
31                 x -= 1
32                 print("%s在消费中,第%d个"%(self.name,x+1))
33         tt.release()
34 x = 0
35 tt = threading.Lock()
36 # tt = threading.Condition
37
38 p = Produce("produce")
39 c = Consume("consume")
40
41 p.start()
42 c.start()
43
44 p.join()
45 c.join()
时间: 2024-08-06 22:14:15

python自动化--语言基础线程、生产者消费者示例的相关文章

Python自动化--语言基础4--模块、文件读写、异常

模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一查询(sys.path)3.一个模块只会被导入一次. 模块的导入方式:0.import sys 导入模块1.from sys import path from语句从模块中导入一个指定的部分(提倡的写法)2.from …… import * 把一个模块的所有内容全都导入(建议不要用这种) 3.from

python自动化--语言基础--数据类型及类型转换

Python中核心的数据类型有哪些?变量(数字.字符串.元组.列表.字典) 什么是数据的不可变性?哪些数据类型具有不可变性数据的不可变是指数据不可更改,比如: 1 a = ("abc",123) #定义元组 2 a[0]=234 #把第一位更改为345 3 print(a) #打印时会报错 不可变:数字.字符.元组可变:列表和字典 Python中常见数据类型 赋值 1 counter = 100 2 miles = 1000 3 name = "nan" 4 pri

Python自动化--语言基础2--运算符、格式化输出、条件语句、循环语句、列表、元组

运算符包括:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运算符 算术运算符 %   取模(余数) //  取相除的整数部分 /   (5/2=2.5) 比较运算符 ==  等于 !=  不等于 <   小于 >   大于 <=  小于等于 >=  大于等于 1 if a==b: 2 print(1) 3 else: 4 print(2) 赋值运算符 a+=b   等于 a=a+b a-=b          a=a-b a*=b          a=a*b a

python网络编程基础(线程与进程、并行与并发、同步与异步)

python网络编程基础(线程与进程.并行与并发.同步与异步) 目录 线程与进程 并行与并发 同步与异步 线程与进程 进程 前言 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行.注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的

java 线程 生产者-消费者与队列,任务间使用管道进行输入、输出 讲解示例 --thinking java4

package org.rui.thread.block2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedB

并发编程基础之生产者消费者模式

一:概念 生产者消费者模式是java并发编程中很经典的并发情况,首先有一个大的容器,生产者put元素到 容器中,消费者take元素出来,如果元素的数量超过容器的容量时,生产者不能再往容器中put元素 ,处于阻塞状态,如果元素的数量等于0,则消费者不能在从容器中take数据,处于阻塞状态. 二:示例 /** * */ package com.hlcui.main; import java.util.LinkedList; import java.util.concurrent.ExecutorSe

Java-J2SE学习笔记-线程-生产者消费者问题

一.概述 模拟生产者消费者问题 二.代码 1.Consumer.java 2.Producer.java 3.SyncStack.java 4.Test.java 1.Consumer.java package ProducerConsumer; public class Consumer implements Runnable { private SyncStack syncStack; public Consumer(SyncStack syncStack) { super(); this.

4.利用python生成器实现简单的“生产者消费者”模型

假如说,没有生成器这种对象,那么如何实现这种简单的"生产者消费者"模型呢? import time def producer(): pro_list = [] for i in range(10000): print "包子%s制作ing" %(i) time.sleep(0.5) pro_list.append("包子%s" %i) return pro_list def consumer(pro_list): for index,stuffe

【Python】协程实现生产者消费者模型

协程的实现为协作式而非抢占式的,这是和进程线程的最大区别.在Python中,利用yield和send可以很容易实现协程. 首先复习下生成器. 如果一个函数使用了yield语句,那么它就是一个生成器函数.当调用这个函数时,它返回一个迭代器.当第一次调用__next__()时候,生成器函数主体开始执行,遇到yield表达式时候终止. 当使用__next__()方法时候,yield value语句返回None:当使用send(v)方法时候,yield value返回v.也就是说,__next__()方