day34-python之进程调用
程序员文章站
2022-06-24 08:23:15
1.信号量 2.同步对象 3.生产者消费者模型 4.递归锁 5.进程调用 ......
1.信号量
import threading,time class mythread(threading.thread): def run(self): if semaphore.acquire(): print(self.name) time.sleep(3) semaphore.release() if __name__=="__main__": semaphore=threading.semaphore() thrs=[] for i in range(100): thrs.append(mythread()) for t in thrs: t.start()
2.同步对象
import threading,time class boss(threading.thread): def run(self): print("boss:今晚大家都要加班到22:00。") print(event.isset())# false event.set() time.sleep(5) print("boss:<22:00>可以下班了。") print(event.isset()) event.set() class worker(threading.thread): def run(self): event.wait()# 一旦event被设定,等同于pass print("worker:哎……命苦啊!") time.sleep(1) event.clear() event.wait() print("worker:ohyeah!") if __name__=="__main__": event=threading.event() threads=[] for i in range(5): threads.append(worker()) threads.append(boss()) for t in threads: t.start() for t in threads: t.join() print("ending.....")
3.生产者消费者模型
# import time,random # import queue,threading # # q = queue.queue() # # def producer(name): # count = 0 # while count <10: # print("making........") # time.sleep(5) # q.put(count) # print('producer %s has produced %s baozi..' %(name, count)) # count +=1 # #q.task_done() # q.join() # print("ok......") # def consumer(name): # count = 0 # while count <10: # time.sleep(random.randrange(4)) # # if not q.empty(): # # print("waiting.....") # #q.join() # data = q.get() # print("eating....") # time.sleep(4) # # q.task_done() # #print(data) # print('\033[32;1mconsumer %s has eat %s baozi...\033[0m' %(name, data)) # # else: # # print("-----no baozi anymore----") # count +=1 # # p1 = threading.thread(target=producer, args=('a君',)) # c1 = threading.thread(target=consumer, args=('b君',)) # c2 = threading.thread(target=consumer, args=('c君',)) # c3 = threading.thread(target=consumer, args=('d君',)) # # p1.start() # c1.start() # c2.start() # c3.start()
4.递归锁
import threading import time class mythread(threading.thread): def actiona(self): r_lcok.acquire() #count=1 print(self.name,"gota",time.ctime()) time.sleep(2) r_lcok.acquire() #count=2 print(self.name, "gotb", time.ctime()) time.sleep(1) r_lcok.release() #count=1 r_lcok.release() #count=0 def actionb(self): r_lcok.acquire() print(self.name, "gotb", time.ctime()) time.sleep(2) r_lcok.acquire() print(self.name, "gota", time.ctime()) time.sleep(1) r_lcok.release() r_lcok.release() def run(self): self.actiona() self.actionb() if __name__ == '__main__': # a=threading.lock() # b=threading.lock() r_lcok=threading.rlock() l=[] for i in range(5): t=mythread() t.start() l.append(t) for i in l: i.join() print("ending....")
5.进程调用
# from multiprocessing import process # import time # # # def f(name): # time.sleep(1) # print('hello', name,time.ctime()) # # if __name__ == '__main__': # p_list=[] # for i in range(3): # # p = process(target=f, args=('alvin',)) # p_list.append(p) # p.start() # # for i in p_list: # i.join() # print('end') from multiprocessing import process import time # class myprocess(process): # # # def __init__(self): # # super(myprocess, self).__init__() # # #self.name = name # # def run(self): # time.sleep(1) # print ('hello', self.name,time.ctime()) # # if __name__ == '__main__': # p_list=[] # # # for i in range(3): # p = myprocess() # p.daemon=true # p.start() # p_list.append(p) # # # for p in p_list: # # p.join() # # print('end') # from multiprocessing import process # import os # import time # # # def info(title): # print("title:", title) # print('parent process:', os.getppid()) # print('process id:', os.getpid()) # # def f(name): # # info('function f') # print('hello', name) from multiprocessing import process import os import time def info(title): print("title",title) print("parent process:",os.getppid()) print("process id:",os.getpid()) def f(name): info('function f') print("hello",name) if __name__ == '__main__': info('main process line') time.sleep(1) print("-------") p = process(target=info("yuan")) p.start() p.join() # if __name__ == '__main__': # # info('main process line') # # time.sleep(1) # print("------------------") # p = process(target=info, args=('yuan',)) # p.start() # p.join()
上一篇: WebShell代码分析溯源(七)
下一篇: 总结了24个C++的大坑,你能躲过几个
推荐阅读
-
WPF利用RPC调用其他进程的方法详解
-
SpringCloud实战之Feign声明式服务调用
-
android开发之调用手机的摄像头使用MediaRecorder录像并播放
-
iOS布局渲染之UIView方法的调用时机详解
-
Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
-
iOS安全防护系列之ptrace反调试与汇编调用系统方法详解
-
python学习笔记之调用eval函数出现invalid syntax错误问题
-
PHP实用小技巧之调用录像的方法
-
android开发之调用手机的摄像头使用MediaRecorder录像并播放
-
linux命令大全之ps命令详解(查看进程结果)