Python操作系统相关技能
Python操作系统相关技能
微电子学与固体电子学-俞驰
如切如磋,如琢如磨,臻于至善。
展开
-
celery无密码连接redis与带密码连接redis
配置 代码配置 带密码 app = Celery('celery_tasks.tasks', broker='redis://:appleyuchi@127.0.0.1:6379/0') 无密码 app = Celery('celery_tasks.tasks', broker='redis://:@127.0.0.1:6379/0')原创 2020-09-20 22:08:43 · 2181 阅读 · 0 评论 -
线程死锁与共享变量的使用(转载)
通过轮询的方式解决线程间共享全局变量的问题from threading import Threadg_num = 0g_flag = 1 # 增加一个标识全局变量def test1(): global g_num global g_flag if g_flag == 1: for i in range(1000000): ...转载 2020-04-01 16:19:21 · 198 阅读 · 0 评论 -
semaphore的使用
[1]中的代码如下:import asyncioasync def do_work(semaphore): # new: only enter if semaphore can be acquired async with semaphore: print('start work') # optionally do a lot of ...原创 2020-04-01 14:31:15 · 400 阅读 · 0 评论 -
爬虫为什么使用asyncio以及邮件系统为什么使用celery
#--------------------------------下面是asyncio-------------------------------------------[1]中有一句非常好:爬虫主要运行时间消耗是请求网页时的io阻塞假设爬取10个网页,每个网页的响应时间是300ms,那么同步爬取耗时就是3s,使用asyncio,在网页响应的300ms内,去发起另外一个爬取...原创 2020-03-24 14:42:29 · 1244 阅读 · 0 评论 -
关于python的线程安全的一些理解.
这里的话,因为python有GIL全局锁的关系.所以和其他语言不太一样.稍微提一下async with lock这个东西.这个东西其实是用来处理协程安全的.并不是用来处理线程安全的....原创 2020-03-03 19:34:28 · 338 阅读 · 0 评论 -
RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
官方要求:使用连接池给出的案例是[2]Reference:[1]https://github.com/aio-libs/aiomysql/issues/179[2]https://github.com/aio-libs/aiomysql/blob/master/examples/example_pool.py...原创 2020-02-27 08:32:57 · 2176 阅读 · 0 评论 -
子线程和主线程的关系
运行附录中test.py中的代码,主线程和子线程啥关系?首先多个子线程在运行的时候.然后终端输入ps -ef|grep python会发现:虽然我们的脚本中是两个子线程,但是终端的监控中只能看见一个主线程.上述是终端视角.那么子线程和子线程的关系呢?轮流执行.主线程和子线程的结束关系是啥呢?取决于子线程是否是守护设置守护的话,那么主线程结束的...原创 2020-02-23 14:04:37 · 624 阅读 · 0 评论 -
@property的必要性
文章[1]的作者提到:What will we do if we need to control access to x, make it read-only or do something else to it? Won't we have to refactor everything to the getters and setters that we avoided?意思是:虽然...原创 2020-01-22 19:50:01 · 473 阅读 · 0 评论 -
@staticmethod用法
其实就是C++里面的静态方法staticmethod用于修饰类中的方法,使其可以在不创建类实例的情况下调用方法,这样做的好处是执行效率比较高。当然,也可以像一般的方法一样用实例调用该方法。该方法一般被称为静态方法。静态方法不可以引用类中的属性或方法,其参数列表也不需要约定的默认参数self。静态方法就是类对外部函数的封装,有助于优化代码结构和提高程序的可读性。下面代...转载 2020-01-22 16:11:51 · 5653 阅读 · 3 评论 -
python中@wraps的作用
下面两种用法等效1.@functools.wraps2.from functools import wraps@wraps根据[1]:functools.wraps 旨在消除装饰器对原函数造成的影响#--------------------------------------这东西,扯白了就是:就是消除副作用。#-----------------------...原创 2020-01-22 15:56:25 · 2042 阅读 · 0 评论 -
monkey補丁後異步速度比同步還慢是怎麼回事
代碼如下:from gevent import monkeyimport timestart=time.time()print("start=",start)monkey.patch_all()end=time.time()print("end=",end)print("猴子補丁耗時=",end-start)import geventimport osdef fun...原创 2019-11-28 18:31:56 · 217 阅读 · 0 评论 -
gevent-tutorial翻译和解读
原文在[1],翻译的在[2],这篇博客进一步解读一些代码,以及加了一些注释,并且所有代码都已经改成python3.x:(斜线表示原文引用)-------------------------------------------------------------------------------------------------------------------------------...转载 2019-11-27 17:55:04 · 382 阅读 · 0 评论 -
《关于gevent的几点思考》阅读笔记
[1]写得很好,所以打算自己消化一下,增加一些自己的理解。(下面斜体表示原文引用)1. greenlet/eventlet/gevent的关系只要学gevent就行,其他扔掉2. gevent猴子补丁猴子补丁monkey_patch,将标准库中大部分的阻塞式调用替换成非阻塞的方式,包括socket、ssl、threading、select、httplib等。通过monkey....转载 2019-11-26 12:41:31 · 298 阅读 · 0 评论 -
关于高并发的一些笔记
四核八线程云主机,如果10w要求一秒内响应,后台处理200ms,且API属于CPU密集型,那么考虑最坏情况,假如这其中有1w个请求发生在同一时刻点。要在一秒内响应的话。。。需要的数量是?其实稍微思考下就可以知道,如果每200ms都只能完成1w个请求的处理,那么1s结束后就只能完成5w的请求.所以上面的问题是有毛病的,答案是至少是2500台.另外IO涉及...原创 2019-09-29 20:49:41 · 304 阅读 · 0 评论 -
多线程thread
在使用多线程之前,我们首页要理解什么是进程和线程。什么是进程?计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据。它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期。进程(有时被称为重量级进程)是程序的一次执行。每个进程都有自己的地址空间,内存,数据栈以及其它记录其运行轨迹的辅助数据。操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间。什么是线程?...转载 2018-01-11 13:52:42 · 221 阅读 · 0 评论 -
矩阵与矢量求导
Definition D.l:设:f(x)f(x)f(x)是标量,x=(x1…xN)Tx=\left(x_{1} \ldots x_{N}\right)^{T}x=(x1…xN)T,那么:∂f(x)∂x=(∂f(x)∂x1∂f(x)∂x2⋮∂f(x)∂xN)\frac{\partial f(x)}{\partial x}=\left(\begin{array}{c}{\frac{\pa...转载 2019-08-12 15:34:56 · 592 阅读 · 0 评论 -
RabbitMQ 队列消息持久化
参考链接:https://www.cnblogs.com/Keep-Ambition/p/8044752.html 假如消息队列test里面还有消息等待消费者(consumers)去接收,但是这个时候服务器端宕机了,这个时候消息是否还在? 1、队列消息非持久化服务端(producer):1234转载 2018-01-28 22:12:33 · 7146 阅读 · 0 评论 -
Queue用法
Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。put方法用以插入数据到队列中,put方法还有两个可选参 数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到 该队列有剩余的空间。如果超时,会抛出Queue.Full异常。如果blocked为False,但该Queue已满,会...转载 2018-01-12 22:59:23 · 1414 阅读 · 0 评论 -
pipe实现单工和半双工模式
其实网上用pipe的python代码所谓的全双工,其实都是半双工。单工模式代码:import sysreload(sys)sys.setdefaultencoding('utf-8')import multiprocessingimport timedef proc1(pipe): # while True: for i in range(3):原创 2018-01-13 13:00:42 · 1083 阅读 · 0 评论 -
进程池Pool
Pool在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个目标,手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到poo...转载 2018-01-13 15:51:37 · 1254 阅读 · 0 评论 -
Daemon(守护与否)和join(阻塞与否)
#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import multiprocessingimport timedef worker(interval): print("work start:{0}".format(time.ctime())); time.slee原创 2018-01-09 21:55:36 · 490 阅读 · 0 评论 -
回调与多进程
大佬们的解释:为了指定某函数(对象)在进入到某状态时要进行的操作,将该操作封装成一个函数,并将该函数指针作为参数传入。在这个动作中被传递的函数就叫做 回调函数。回调函数的本质其实就是:函数调用函数,或者说,就是嵌套函数,类似于嵌套for循环。但是由于应用场景不同取了个这样的名字。感觉是为了区别于传统的函数调用感觉是为了区别于传统的函数调用其实回调函数不太好理解的地方是他的应转载 2018-01-13 22:35:56 · 963 阅读 · 0 评论 -
创建多进程
#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import multiprocessingimport timedef worker_1(interval): print ("worker_1") time.sleep(interval) print ("...转载 2018-01-09 21:42:18 · 315 阅读 · 0 评论 -
Python BaseHTTPServer 模块解析
#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')# @explain: 实现GET方法和POST方法请求from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandlerimport urllibclass ServerH转载 2018-01-31 17:08:09 · 1215 阅读 · 0 评论 -
python中的协程:greenlet和gevent
协程是一中多任务实现方式,它不需要多个进程或线程就可以实现多任务。1.通过yield实现协程:代码:import timedef A(): while 1: print('------A-----') time.sleep(0.1) yield() def B(): while 1: print('-...转载 2018-01-16 20:20:30 · 787 阅读 · 0 评论 -
创建单进程
#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import multiprocessingimport timedef worker(interval): n = 5 while n > 0: print("The time is {0}".forma转载 2018-01-09 21:41:23 · 156 阅读 · 0 评论 -
将进程定义为类
#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf-8')import multiprocessingimport timeclass ClockProcess(multiprocessing.Process): def __init__(self, interval):转载 2018-01-09 21:44:09 · 294 阅读 · 0 评论 -
进程锁Lock
#-*- encoding:utf-8 -*-import multiprocessingimport sysreload(sys)sys.setdefaultencoding('utf-8')def worker_with(lock, f): with lock:#这里给资源上锁 fs = open(f, 'a+') n = 3转载 2018-01-09 22:05:48 · 215 阅读 · 0 评论 -
Semaphore用法
semaphore用法#-*- encoding:utf-8 -*-import multiprocessingimport timeimport sysreload(sys)sys.setdefaultencoding('utf-8')def worker(s, i): s.acquire() print(multiprocessing.current_proc转载 2018-01-09 22:07:15 · 556 阅读 · 0 评论 -
大佬对协程以及try except的详细解释
协程中提到的异步指的是两个函数一起运行,各个函数运行到哪里cpu会中断是不一定的。---------------------------------------------------------------------------------------协程能执行成百上千个协程就是并发的一种并发不是并行,一个协程被阻塞,换其他协程继续上等待一个结束另一个在启动的都是单线程虽然不...原创 2018-01-26 22:59:54 · 1416 阅读 · 0 评论 -
rabbitMQ基本通信代码使用
转载自:http://www.cnblogs.com/jfl-xx/p/7324285.html#3899115首先终端输入netstat -nltp看下tcp6的端口是5671还是5672然后在下面的代码中相应地改为5671或者5672send.py#!/usr/bin/env python3# -*- coding: utf-8 -*-import p转载 2018-01-28 21:22:41 · 608 阅读 · 0 评论 -
Event的用法
这篇对Event的用法讲的比较清楚https://www.cnblogs.com/hoojjack/p/6639128.html其实所谓的Event控制线程/进程通信,Event中所谓的通信,并不是在流通具体的字符串信息,而是特指流通“状态信息”#-*- encoding:utf-8 -*-import sysreload(sys)sys.setdefaulten转载 2018-01-12 21:45:18 · 1509 阅读 · 0 评论