这里是Python7编程挑战-多线程专题!

每天学习3个问题,包括初级,中级,高级问题各1个。

今天是第5天!一起来呀,就7天!每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道。

每日3题,100天之后成为大牛!

如果有不明白的,给麦叔留言。

[Easy] threading.local的作用?

思考30秒再往下翻...

Python提供了 threading.local 类,将这个类实例化得到一个全局对象, 但是不同的线程使用这个对象存储的数据其它线程不可见(本质上就是不同的线程使用这个对象时为其创建一个独立的字典)。

[Normal] 请用代码演示一下互斥锁

思考30秒再往下翻...

互斥锁是一种独占锁,同一时刻只有一个线程可以访问共享的数据。使用很简单,初始化锁对象,然后将锁当做参数传递给任务函数,在任务中加锁,使用后释放锁。

import threading

import time

number = 0

lock = threading.Lock()

def plus(lk):

global number # global声明此处的number是外面的全局变量number

lk.acquire() # 开始加锁

for _ in range(1000000): # 进行一个大数级别的循环加一运算

number += 1

print("子线程%s运算结束后,number =%s" % (threading.current_thread().getName(), number))

lk.release() # 释放锁,让别的线程也可以访问number

if __name__ == '__main__':

for i in range(2): # 用2个子线程,就可以观察到脏数据

t = threading.Thread(target=plus, args=(lock,)) # 需要把锁当做参数传递给plus函数

t.start()

time.sleep(2) # 等待2秒,确保2个子线程都已经结束运算。

print("主线程执行完毕后,number = ", number)

[Hard] 什么是僵尸进程和孤儿进程?怎么避免僵尸进程?

思考30秒再往下翻...

孤儿进程:父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init 进程(进程号为1)所收养,并由init 进程对他们完成状态收集工作。

僵尸进程:进程使用fork 创建子进程,如果子进程退出,而父进程并没有调用wait 或waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中的这些进程是僵尸进程。

避免僵尸进程的方法:

1.fork 两次用孙子进程去完成子进程的任务

2.用wait()函数使父进程阻塞

3.使用信号量,在signal handler 中调用waitpid,这样父进程不用阻塞

import os, sys, time

pid = os.fork()

getpid = os.getpid()

getppid = os.getppid()

if pid == 0:

print("子进程 pid={}, getpid={}, getppid={}".format(pid, getpid, getppid))

else:

print("主进程 pid={}, getpid={}, getppid={}".format(pid, getpid, getppid))

time.sleep(100) # 在主进程结束sleep之前,子进程就会成为僵尸进程

mac系统可以通过命令ps -A -ostat,ppid,pid,command | grep -e '^[Zz]'查看僵尸进程

➜ ~ ps -A -ostat,ppid,pid,command | grep -e '^[Zz]'

Z+ 31741 31742 (Python)

➜ ~https://mp.weixin.qq.com/s/2zEESWd2vBVnJFzPRdf06A​mp.weixin.qq.com

你可以再文章下面打卡,分享你的看法。

我是麦叔:教你学编程,陪你走职场的路!

python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...相关推荐

  1. delphi 多个线程 多个进度条_多线程有哪些优点?- Python每日3题(多线程专题)

    这里是Python7编程挑战-多线程专题! 每天学习3个问题,包括初级,中级,高级问题各1个. 今天是第2天!一起来呀,就7天! 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一 ...

  2. Charles学习(四)之使用Map local代理本地静态资源以及配置移动端代理在真机上调试iOS和Android客户端...

    前言 问题一:我们在App内嵌H5开发的过程中,肯定会遇到一个问题就是我不想在chrome的控制台中调试也不想在模拟器中调试,我想要在真机上调试,那么如何解决这个问题呢? 问题二:我们期待调试时达到的 ...

  3. Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端...

    前言 问题一:我们在App内嵌H5开发的过程中,肯定会遇到一个问题就是我不想在chrome的控制台中调试,我想要在手机上调试,那么如何解决这个问题呢? 问题二:我们期待调试时达到的效果就是和Charl ...

  4. python爬虫天天基金_不使用Python爬虫框架,多线程+代理池爬取天天基金网、股票数据...

    提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段.为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作. 本次使用天天基金网进行 ...

  5. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  6. python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程:协程.多线程.多进程 CPU密集型计算与IO密集型计算 多线程.多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者-消费者爬虫 Lock解决线程安全问题 使用线程池 ...

  7. python 守护线程 join_Python多线程threading join和守护线程setDeamon原理详解

    同一进程下的多个线程共享内存数据,多个线程之间没有主次关系,相互之间可以操作:cpu执行的都是线程,默认程序会开一个主线程:进程是程序以及和程序相关资源的集合:某些场景下我们可以使用多线程来达到提高程 ...

  8. python的多线程threading

    多线程threading 1.Thread创建线程: 上代码: #!/usr/bin/env python3import threading import timedef A():t_name = t ...

  9. Python多线程threading和多进程multiprocessing的区别及代码实现

    1. 多线程threading import time from threading import Threaddef thread_read(data):while True:print('read ...

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-91 Anagrams问题
  2. JavaScript 编码小技巧
  3. 公众号知道我浏览他吗_微信公众平台文章能看到访客吗?
  4. SSM/SpringBoot+layui实现数据表格
  5. 安装eclipse中html/jsp/xml editor插件以及改动html页面的字体
  6. linux文本编辑器vi实验心得,linux中vi编辑器的练习心得
  7. x264_param_t结构体参数分析
  8. Redis基础知识详解(非原创)
  9. EasyRecovery---U盘数据恢复技巧
  10. 使用读写管道作为事件通知的C++实现
  11. mysql 附近3公里的,mysql 查询附近N公里内数据
  12. 视频教程-java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码-Java
  13. VS2019离线安装方法
  14. 内存碎片的定义、种类、产生原因以及解决办法
  15. COJ 0358 xjr考考你数据结构(根号3)线段树区间修改
  16. Linux关闭swap
  17. 商品-商品订单-支付订单
  18. Shell内建命令之echo、local、logout
  19. ListContainer教程
  20. Python制作塔防小游戏

热门文章

  1. 中兴8912交换机show run故障处理
  2. 轻轻松松统计代码行数
  3. 应用管理系列 — 怎么管理Sybase数据库
  4. 人生长途,感受着不断拼搏...
  5. HDU 3669 Cross the Wall(斜率DP+预处理)
  6. servlet (七)javaBean
  7. 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.
  8. 设计模式之strategy模式(C++实现)
  9. 10 个步骤让你成为高效的 Web 开发者
  10. 分清函数指针和指针函数