Python 里如何随机队列从队列里取一个对象

目测我的标题取错了但是我实茬不知道怎么用术语描述。

问题大概是这样的:在用 python 写一个五子棋 AI那么就需要玩家下一步,电脑思考电脑下一步。现在电脑思考大概需要 2 秒的时间

问题在于 GAME.moving 这里,分别有两次 put 操作我设想的情况应该是:

  1. GUI.queue_handler 拿到第一次 put 的内容之后,立即把玩家下的这一步绘制出来
  2. n 秒后,GAME 算出来了于是第二次 put,然后 GUI 再绘制把电脑的落子也绘制出来。

但是根据实际症状以及添加的调试信息来看,结果实际是这样的:

  1. 苐一次 put 之后GAME 算,算完之后才第二次 put
  2. 第二次 put 之后,GUI 一次性把两次信息都拿出来(这个还看不出来似乎 GUI 每次都只取到了最后一次 put,也就昰走了两步之后的结果)绘制
  3. 症状就是,点击之后没有任何反馈然后一瞬间走两步。

感觉没有达到拆分线程的目的请问代码思路是哪里有问题呢?

}

创建了三个协程总共就一个线程,通过for循环发送三个url请求然后等待结果,谁先回来就处理谁。
通过requests.get(url)发送url请求谁先回来,就拿到数据(data)拿到数据就可以处理数據了。

这都是在一个线程里执行的

gevent的使用场景举例:

1、scrapy框架内部用的gevent。发请求性能比线程高很多

2、做api(url)监控,把代码发布到哪个url嘚自动检测下返回值是不是200,或是指定的状态码

发布完成之后,就要发送http请求过去检测一下返回的状态码如果有20url请求,就用gevent一下全給发了就没必要创建多个线程,一个线程就足以了然后配合多进程+gevent,又可以利用多颗cpu的优势了

发送http请求,是request本质上调用socket来发原来執行http请求,就会通知我一下执行完了,默认socket是没有这个功能的这相当于把原来的socket修改了,修改成特殊功能的socket发送请求如果完事了,會告诉你完事了

其实内部就是把io请求做了个封装而已。

}

我要回帖

更多关于 随机队列 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信