Skip to content

python多线程是没用,多进程呢? #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
134820134820 opened this issue Jan 11, 2024 · 8 comments
Open

python多线程是没用,多进程呢? #29

134820134820 opened this issue Jan 11, 2024 · 8 comments

Comments

@134820134820
Copy link

pythonGIL的问题可以用多进程来解决,但是问题是如何进行进程间的协调是个问题,作者有思路吗?
另外想问下目前整体运行帧数有多少

@EthanH3514
Copy link
Owner

多进程没啥思路,之前有过尝试但没写出来,后来觉得开进程开销太大了,而且进程间通信消耗也比较大,写了也不一定有优化就放弃了。

最近在想怎么优化这些代码,发现这个项目可能就用不到多线程,之前搞的多线程感觉是个负优化。

之前的多线程是一个线程用于截图+推理,另一个线程按一个比较高的频率去监视推理得到的变量(敌人位置)的变化,并且控制将变量拿来给鼠标移动用

发现这样还不如不加,控制鼠标的那个线程以一个很高的频率去轮询是很耗资源的,尤其是在python这样并没有多线程的环境下,要加也应该加在推理内部或者截图里面,但这些都有现成写好的库

要加多线程也是一个线程给抓屏,一个线程推理+鼠标移动,但这样又涉及到抓屏出来的数据的时效性了。如果用某种数据结构缓存了抓屏线程的输出数据,每次推理理应拿取最新的数据,那么感觉应该没有多线程纯大循环差不多(?)

我的配置是RTX3050 Laptop

我本地把之前的多线程改掉了,目前是完全没有多线程的程序,截图+推理+鼠标移动 大循环,这样下来在同时跑Apex游戏和代码的情况下能达到90帧(如果关闭鼠标移动),但是开启鼠标移动就会降到30帧,发现了瓶颈是鼠标移动的部分的代码写的有问题

已经排除驱动的库的问题,感觉大概率是格式转换的锅

@134820134820
Copy link
Author

能否鼠标单独开一个进程,每50ms从另一个进程获得一个点,鼠标就一直向目标点的方向移动,毕竟本身就不该考虑大范围拉枪.而小范围内跟踪则不需要推理位置

@EthanH3514
Copy link
Owner

我尝试一下多进程

@134820134820
Copy link
Author

134820134820 commented Jan 14, 2024

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

@EthanH3514
Copy link
Owner

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

这个库是我从别的开源项目里拿过来的,可能是这个库没有实现对应的功能。

但是库里有源码文件,感觉可以写一个函数,先点击左键,再移动,最后释放左键。

@134820134820
Copy link
Author

另外请教个问题,我这边使用罗技驱动鼠标时,无法进行拖动操作(同时通过驱动点击和移动鼠标),有方法解决吗

这个库是我从别的开源项目里拿过来的,可能是这个库没有实现对应的功能。

但是库里有源码文件,感觉可以写一个函数,先点击左键,再移动,最后释放左键。
就这样搞似乎不行,它会松开,但win32却可以,不知道啥原因

@quijoo
Copy link

quijoo commented Feb 16, 2024

多线程可能有时序问题, 屏幕位置 -> AI 推理 -> 修改鼠标移动目标 这个顺序如果不一样,多线程多出来的算力就是被浪费掉了(目标根本不在计算出来的位置)。 所以最多 截图 + YOLO 一个线程, 鼠标移动一个线程(固定时间间隔移动,保证平滑)

@EthanH3514
Copy link
Owner

多线程可能有时序问题, 屏幕位置 -> AI 推理 -> 修改鼠标移动目标 这个顺序如果不一样,多线程多出来的算力就是被浪费掉了(目标根本不在计算出来的位置)。 所以最多 截图 + YOLO 一个线程, 鼠标移动一个线程(固定时间间隔移动,保证平滑)

是的,目前就是截图 -> 推理 -> 鼠标移动大循环了,调罗技驱动可以达到4w+ cps,鼠标移动耗时对循环速度几乎没有影响

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants