gevent

记一次阴阳师挂机脚本开发

北城以北 提交于 2020-04-06 08:32:59
  最近和跟着同事一起玩阴阳师,发现这个游戏有太多重复操作了,这完全就是浪费生命啊;所以想到用python写一个自动挂机脚本。 最开始想得很简单,就是一直去找相应得按钮,然后点击就可以了。所以直接用pyautogui的图片定位和点击功能就行了,也确实实现了,代码如下:    import pyautogui,time pyautogui.FAILSAFE = True ''' PyAutoGUI提供了一个保护措施。当pyautogui.FAILSAFE = True时,如果把鼠标光标在屏幕左上角, PyAutoGUI函数就会产生pyautogui.FailSafeException异常,用于在程序失控时退出 ''' time.sleep( 2 ) def get_point(picture): ''' 精确匹配某个按钮的位置;通过传入图片获取图片在屏幕上的定位,一旦获取到值则退出,否则继续尝试 ''' picture = ' ./img/ ' + picture count = 5 while count > 0: point = pyautogui.locateCenterOnScreen(picture) if point is not None: return point else : count -= 1 def get_range(picture): '''

Passing a multiprocessing queue/dictionary/etc.. to green threads

落花浮王杯 提交于 2020-04-06 03:31:55
问题 Is it safe to pass a multiprocessing object (queue, dictionary, etc...) to multiple gevent threads? Since they're not actually running concurrently, I don't think there's a problem. However, I know that gevent isn't supposed to be specifically compatible with multiprocessing. 回答1: The benefits would likely be lost, standard threaded queue implements locks where a green thread would likely be slowed down. Thankfully, gevent often has its own but similar constructs. Check out gevent.queue 回答2:

Passing a multiprocessing queue/dictionary/etc.. to green threads

别来无恙 提交于 2020-04-06 03:30:07
问题 Is it safe to pass a multiprocessing object (queue, dictionary, etc...) to multiple gevent threads? Since they're not actually running concurrently, I don't think there's a problem. However, I know that gevent isn't supposed to be specifically compatible with multiprocessing. 回答1: The benefits would likely be lost, standard threaded queue implements locks where a green thread would likely be slowed down. Thankfully, gevent often has its own but similar constructs. Check out gevent.queue 回答2:

从豆瓣中抓取图片以及音乐

泪湿孤枕 提交于 2020-03-30 23:12:55
该脚本可以从豆瓣中抓取图片以及音乐,可以输入自己的正则,正则的合法性我没有去进行验证,这只是一个简单的文件抓取,只是用了一些基本的模块,看到网上好多使用 Beautiful Soup 模块的例子,一会研究研究。代码很简单,就不多解释了 #! /usr/bin/python2.6.6 # -- coding:utf-8 -- import urllib, urllib2, gevent, re import time, os from gevent import monkey monkey.patch_all() def worker(url): try: m_arr = [] parent_dir = os.path.join("%s" % time.strftime('%Y-%m-%d',time.localtime(time.time()))) #按日期创建目录 if not os.path.exists(parent_dir): os.mkdir(parent_dir) os.chdir(parent_dir) if not os.path.exists('images'):#创建存储图片的目录 os.mkdir('images') if not os.path.exists('radios'):#创建存储音乐的目录 os.mkdir('radios') response

第十二节 gevent多任务

北慕城南 提交于 2020-03-26 18:12:31
import geventfrom gevent import monkeyimport timemonkey.patch_all() # 将程序中用到的耗时模块操作的代码,换为gevent中自己实现的模块def f(n): for x in range(n): print(gevent.getcurrent(), x) time.sleep(0.5)# g1 = gevent.spawn(f, 5)# g2 = gevent.spawn(f, 5)# g3 = gevent.spawn(f, 5)# g1.join()# g2.join()# g3.join()gevent.joinall([ gevent.spawn(f, 5), gevent.spawn(f, 5), gevent.spawn(f, 5)]) 来源: https://www.cnblogs.com/kogmaw/p/12575527.html

python中socket、socketio、flask-socketio、WebSocket的区别与联系

旧巷老猫 提交于 2020-03-08 14:33:53
socket、socketio、flask-socketio、WebSocket的区别与联系 socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族和UDP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 WebSocket 是html5新增加的一种通信协议,可以类比于http协议。常见的应用方式如弹幕、web在线游戏。 socketio 是基于socket连接后(并没有自己实现socket的链接而是复用了web框架或gevent、eventlet中的socket)对网络输入输出流的处理,封装了send、emit、namespace、asyncio 、订阅等接口,同时扩展使用了redis、rabbitmq消息队列的方式与其他进程通信。 flask-socketio 是socketio对flask的适配,封装了emit、send和关于room的操作。 select的链接、发送等底层操作还是在flask中做的,socketio对其做了抽象。使用threading模式时并没有自己实现socket的链接而是复用了web框架的socket

Cpython3.8安装Gevent

旧城冷巷雨未停 提交于 2020-03-08 04:36:39
1、更换国内pip源 1.1、常用的国内源有: (1)阿里云 http://mirrors.aliyun.com/pypi/simple/ (2)豆瓣http://pypi.douban.com/simple/ (3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ (4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/ (5)华中科技大学http://pypi.hustunique.com/ 1.2、使用 1.2.1、临时更改源 以豆瓣安装Django为例:(我并没有使用过,因为既然要改就改彻底一点) pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django 1.2.2、永久更改 需要添加或者修改 pip.ini 文件。 首先找到文件应当存在的路径C:\Users\Administrator\AppData\Roaming。其中administrator是你当前的登录的用户。 方法一: win+R输入%appdata% 方法二: 打开资源管理器 然后再该文件夹下找pip文件夹。没有的话就创建一个。在其下新建文件,pip.ini。填入以下内容(以阿里为例): [global] timeout = 6000 index-url

爬虫性能

我怕爱的太早我们不能终老 提交于 2020-03-05 01:47:02
这里我们通过请求网页例子来一步步理解爬虫性能 当我们有一个列表存放了一些url需要我们获取相关数据,我们首先想到的是循环。 简单的循环串行 这一种方法相对来说是最慢的,因为一个一个循环,耗时是最长的,是所有的时间总和 代码如下: import requests url_list = [ 'http://www.baidu.com', 'http://www.pythonsite.com', 'http://www.cnblogs.com/' ] for url in url_list: result = requests.get(url) print(result.text) 通过线程池 通过线程池的方式访问,这样整体的耗时是所有连接里耗时最久的那个,相对循环来说快了很多 import requests from concurrent.futures import ThreadPoolExecutor def fetch_request(url): result = requests.get(url) print(result.text) url_list = [ 'http://www.baidu.com', 'http://www.bing.com', 'http://www.cnblogs.com/' ] pool = ThreadPoolExecutor(10) for

Python--线程队列(queue)、multiprocessing模块(进程对列Queue、管道(pipe)、进程池)、协程

那年仲夏 提交于 2020-03-05 00:36:02
队列(queue) 队列只在多线程里有意义,是一种线程安全的数据结构。 get与put方法 ''' 创建一个“队列”对象 import queue q = queue.Queue(maxsize = 10) queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中: q.put() 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为True。如果队列当前为空且block为True,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为False,put方法将引发Full异常。 import queue q=queue.Queue(3) q.put(11) q.put(22) q.put(33) q.put(44,False) #queue.Full ==q.put_nowait() 将一个值从队列中取出 q.get() 调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False

异步同步、阻塞非阻塞、异步回调、线程队列和协程

六月ゝ 毕业季﹏ 提交于 2020-03-04 15:35:34
  今天学习了异步同步、阻塞非阻塞、异步回调、线程队列和协程   一、异步同步和阻塞非阻塞   线程的三种状态:     1、就绪     2、运行     3、阻塞   阻塞:遇到了IO操作 代码卡住 无法执行下一行 CPU会切换到其他任务   非阻塞: 与阻塞相反 代码正在执行(运行状态) 或处于就绪状态   阻塞和非阻塞描述的是运行的状态   同步:提交任务必须等待任务完成,才能执行下一行   异步:提交任务不需要等待任务完成,立即执行下一行   指的是一种提交任务的方式   二、异步回调     为什么回调:子进程帮助主进程完成任务 处理任务的结果应该交还给主进程     其他方式也可以将数据交还给主进程       1、shutdown 主进程会等到所有任务完成       2、result函数 会阻塞直到任务完成     注意:       回调函数什么时候被执行?子进程完成时       谁在执行回调函数?主进程     线程的异步回调       使用方式都相同 唯一的不同是执行回调函数 是子线程在执行 #进程利用回调完成生产者消费者from concurrent.futures import ProcessPoolExecutor import os pool = ProcessPoolExecutor() #爬虫 从网络某个地址获取一个HTML文件 import