- 如下程序,运行起来后,只有一个线程,就是主线程,在主线程里面,执行代码,顺序下来,一直执行到结束, 主线程就退出了。 同时进程也结束了。
| fee = input('请输入午餐费用:') |
| members = input('请输入聚餐人姓名,以英文逗号,分隔:') |
| |
| |
| memberlist = members.split(',') |
| |
| headcount = len(memberlist) |
| |
| |
| avgfee = int (fee) / headcount |
| print(avgfee) |
- 创建新线程,如果没有执行join方法,主线程不会等待子线程
| print('主线程执行代码') |
| |
| |
| from threading import Thread |
| from time import sleep |
| |
| |
| def threadFunc(arg1,arg2): |
| print('子线程 开始') |
| print(f'线程函数参数是:{arg1}, {arg2}') |
| sleep(5) |
| print('子线程 结束') |
| |
| |
| thread = Thread( |
| |
| |
| |
| target=threadFunc, |
| |
| |
| |
| args=('参数1', '参数2') |
| ) |
| |
| |
| |
| |
| thread.start() |
| |
| |
| |
| thread.join() |
| print('主线程结束') |
| from threading import Thread,Lock |
| from time import sleep |
| |
| bank = { |
| 'byhy' : 0 |
| } |
| |
| bankLock = Lock() |
| |
| |
| def deposit(theadidx,amount): |
| |
| bankLock.acquire() |
| |
| balance = bank['byhy'] |
| |
| sleep(0.1) |
| bank['byhy'] = balance + amount |
| print(f'子线程 {theadidx} 结束') |
| |
| |
| bankLock.release() |
| |
| theadlist = [] |
| for idx in range(10): |
| thread = Thread(target = deposit, |
| args = (idx,1) |
| ) |
| thread.start() |
| |
| theadlist.append(thread) |
| |
| for thread in theadlist: |
| thread.join() |
| |
| print('主线程结束') |
| print(f'最后我们的账号余额为 {bank["byhy"]}') |
Python程序中当所有的 非daemon线程 结束了,整个程序才会结束
- 只要主线程结束了,整个程序就结束了。因为只有主线程是非daemon线程。
| from threading import Thread |
| from time import sleep |
| |
| def threadFunc(): |
| sleep(2) |
| print('子线程 结束') |
| |
| thread = Thread(target=threadFunc, |
| daemon=True |
| ) |
| thread.start() |
| print('主线程结束') |
| from multiprocessing import Process |
| |
| def f(): |
| while True: |
| b = 53*53 |
| |
| if __name__ == '__main__': |
| plist = [] |
| for i in range(2): |
| p = Process(target=f) |
| p.start() |
| plist.append(p) |
| |
| for p in plist: |
| p.join() |
| from multiprocessing import Process,Manager |
| from time import sleep |
| |
| def f(taskno,return_dict): |
| sleep(2) |
| # 存放计算结果到共享对象中 |
| return_dict[taskno] = taskno |
| |
| if __name__ == '__main__': |
| manager = Manager() |
| # 创建 类似字典的 跨进程 共享对象 |
| return_dict = manager.dict() |
| plist = [] |
| for i in range(10): |
| p = Process(target=f, args=(i,return_dict)) |
| p.start() |
| plist.append(p) |
| |
| for p in plist: |
| p.join() |
| |
| print('get result...') |
| # 从共享对象中取出其他进程的计算结果 |
| for k,v in return_dict.items(): |
| print (k,v) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2022-10-08 标识符、运算符
2022-10-08 字面量、注释、变量、数据类型、数据类型转换
2022-10-08 下载安装go,eclipse配置go
2022-10-08 python开发环境