主题:Python爱好者俱乐部
正序浏览
主题图片汇总
主题内检索
浏览:18189 回帖:542
游客没有回帖权限
资深泡菜
泡网分: 24.985
主题: 105
帖子: 6835
注册: 2004年4月
大信 发表于 2021-1-16 12:12
把一个大的ape文件,根据cue拆分为单曲的的ape ?
求数据结构。谢谢!


https://pypi_org/project/pysplitcue/
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
一个人在途上 发表于 2020-8-22 11:08
我就会用python在linux下写点简单脚本
以前下了很多无损音乐,前段时间写了个脚本整理、转换、拆分Ape文件


把一个大的ape文件,根据cue拆分为单曲的的ape ?
求数据结构。谢谢!
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
最近在学习装饰器,来说说装饰器

一旦装饰器定义好了,原有函数就被装饰器套上了“紧箍咒。怎么才能解除装饰器呢?
---------------------
python 解除装饰器,调用原本函数。

假设fun函数被装饰器装饰了,name调用fun,就不是调用fun本身了,那么如何继续调用本身呢。
使用fun_raw = fun.__wrapped__
这样使用fun_raw就是调用没被装饰器修饰后的函数本身了
---------------------

这跟我想象的不一样。我原来以为函数需要装饰的时候,才用@调用,像这样:

def  decorate(func):
    def wrapper(*args,**kwargs):
        .....
        func(*args,**kwargs)
        .....

    return wrapper

def func1(....):
    ......
    ......

##这是使用装饰器的函数
@decorate
func1(...)

##这是不使用装饰器的函数
func1(...)

------------------
也就是说,需要装饰器的时候,给函数带个帽子,不需要的时候,直接调用函数本身。这样函数的使用更加灵活。而不是在定义函数的时候,给强制戴上装饰器的帽子。

本帖最后由 大信 于 2020-9-26 19:35 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
yejun 发表于 2020-8-23 22:34
我没说清楚,那个错误不是是类型本身,是因为用了self, 用其他实例的方法是可以的. 这里的参数被打包的时候也会打包self的其他成员包括self.process, 这个是不能被打包,因为弱引用.


谢谢,您说得很清楚了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.505
主题: 35
帖子: 3462
注册: 2003年7月
大信 发表于 2020-8-21 23:42
我明白你的意思了,但还是难以认同。我不过是吧self.ProcessPing当做参数传递给进程而已,不该对参数的类型作限制。
下面111楼提供的信息更进一步解释了问题原因。 我觉得这是的Python的无数坑之一.......


我没说清楚,那个错误不是是类型本身,是因为用了self, 用其他实例的方法是可以的. 这里的参数被打包的时候也会打包self的其他成员包括self.process, 这个是不能被打包,因为弱引用.
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
我就会用python在linux下写点简单脚本
以前下了很多无损音乐,前段时间写了个脚本整理、转换、拆分Ape文件 本帖最后由 一个人在途上 于 2020-8-22 11:10 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
一个人在途上 发表于 2020-8-19 21:24
python我连二杆子都算不上
不过这个问题倒是有了提示:cannot pickle weakref object。弱引用带来的问题
网上搜到的:https://www_cnblogs_com/li-dp/p/5837823.html
另外,多线程几乎都是所有编程的难点所在,要有畏惧心理,常常会出现莫名其妙的错误或者结果

目前为止,我用过最舒服的多线程模型是Akka Actor,不过只有scala和java能用


谢谢! 信息很有用。Python的坑不少啊
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
yejun 发表于 2020-8-19 15:49
因为你在Process里面用到了self.ProcessPing这个会造成start吧self带到里面去,就形成了循环. 因为实例方法会指向实例的, 用类方法就不会.
你可以先用本地变量myprocess然后start,再把列表复制到self里面. 也可以试试用pool吧,否则进程管理确实挺麻烦的.


我明白你的意思了,但还是难以认同。我不过是吧self.ProcessPing当做参数传递给进程而已,不该对参数的类型作限制。
下面111楼提供的信息更进一步解释了问题原因。 我觉得这是的Python的无数坑之一.......
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 46.892
主题: 170
帖子: 9709
注册: 2002年1月
windows调试python真的是不太省心,少一句if __name__ == '__main__':就报错。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 46.892
主题: 170
帖子: 9709
注册: 2002年1月
一个人在途上 发表于 2020-8-19 22:51
个人体会,大部分人的思维是线性的,写代码也是线性的,就觉得代码的执行就是线性的,但多线程它偏偏不是线性的


我的策略是:既然写不好,那就不用。如果一定要用,找个写的好的人来写就行了。

术业有专攻。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
benniewang 发表于 2020-8-19 22:25
恩,我就很畏惧多进程。所以现在只用pool而且还不用进程间通信。

个人体会,大部分人的思维是线性的,写代码也是线性的,就觉得代码的执行就是线性的,但多线程它偏偏不是线性的
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 46.892
主题: 170
帖子: 9709
注册: 2002年1月
一个人在途上 发表于 2020-8-19 21:24
python我连二杆子都算不上
不过这个问题倒是有了提示:cannot pickle weakref object。弱引用带来的问题
网上搜到的:https://www_cnblogs_com/li-dp/p/5837823.html
另外,多线程几乎都是所有编程的难点所在,要有畏惧心理,常常会出现莫名其妙的错误或者结果

目前为止,我用过最舒服的多线程模型是Akka Actor,不过只有scala和java能用


恩,我就很畏惧多进程。所以现在只用pool而且还不用进程间通信。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
大信 发表于 2020-8-19 10:04
麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动,报错。
代码及报错信息见图片。

问题就出在462行代码的self.process变量。如果不用实例变量而用内部变量,就没问题。
比如把这一段代码中的self.process变量改为myprocess列表,程序就能通过运行,不会报错。

请问为啥不能用实例变量呢?

@闲聊状态 @一个人在途上 @云的南方
请教各位。谢谢!

另外,如果用terminate()方法停止进程,效率如何?进程内部是while True死循环,会不会进程停不下来,或有其他问题?  —— 中途中断进程,不会导致资源被占用,死锁等问题。

python我连二杆子都算不上
不过这个问题倒是有了提示:cannot pickle weakref object。弱引用带来的问题
网上搜到的:https://www_cnblogs_com/li-dp/p/5837823.html
另外,多线程几乎都是所有编程的难点所在,要有畏惧心理,常常会出现莫名其妙的错误或者结果
以下内容由 一个人在途上 于 2020-8-19 21:30 补充
目前为止,我用过最舒服的多线程模型是Akka Actor,不过只有scala和java能用
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 23.931
主题: 83
帖子: 1021
注册: 2004年6月
一个人在途上 发表于 2020-8-18 21:27
服务器端写个后台任务,结果放mongodb,什么界面都不需要写,也是几十行代码的事,还稳定
想看结果,直接查数据库


不会咋整?懒得去学了
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
老坛泡菜
泡网分: 34.505
主题: 35
帖子: 3462
注册: 2003年7月
大信 发表于 2020-8-19 10:04
麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动,报错。
代码及报错信息见图片。

问题就出在462行代码的self.process变量。如果不用实例变量而用内部变量,就没问题。
比如把这一段代码中的self.process变量改为myprocess列表,程序就能通过运行,不会报错。

请问为啥不能用实例变量呢?

@闲聊状态 @一个人在途上 @云的南方
请教各位。谢谢!

另外,如果用terminate()方法停止进程,效率如何?进程内部是while True死循环,会不会进程停不下来,或有其他问题?  —— 中途中断进程,不会导致资源被占用,死锁等问题。


因为你在Process里面用到了self.ProcessPing这个会造成start吧self带到里面去,就形成了循环. 因为实例方法会指向实例的, 用类方法就不会.
你可以先用本地变量myprocess然后start,再把列表复制到self里面. 也可以试试用pool吧,否则进程管理确实挺麻烦的. 本帖最后由 yejun 于 2020-8-19 16:02 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
大信 发表于 2020-8-19 10:04
麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动,报错。
代码及报错信息见图片。

问题就出在462行代码的self.process变量。如果不用实例变量而用内部变量,就没问题。
比如把这一段代码中的self.process变量改为myprocess列表,程序就能通过运行,不会报错。

请问为啥不能用实例变量呢?

@闲聊状态 @一个人在途上 @云的南方
请教各位。谢谢!

另外,如果用terminate()方法停止进程,效率如何?进程内部是while True死循环,会不会进程停不下来,或有其他问题?  —— 中途中断进程,不会导致资源被占用,死锁等问题。


现在的问题是,用terminate()方法停止进程,在Windows资源管理器中已经看到进程消失。但是用is_alive()检查,进程仍然是“活的”
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 18.24
主题: 11
帖子: 15130
注册: 2012年6月
大信 发表于 2020-08-19 02:04
麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动...


抱歉……不会多线程……多进程……

遇到类似场景 我一般会考虑上docker... 加内存库协调

而实际上……我还没遇到过类似需求……
本帖由安卓客户端编辑于:2020-08-19 11:20:23
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
benniewang 发表于 2020-8-19 10:48
虽然我是计算机专业毕业的,但代码写的很差。多进程只会用pool,而且还不会进程间通信。

你问错人了。


我也是现学现用啊。昨天我用信号量把进程搞死了,大概有一半的进程拉不起来。
应该是高频度的get_value()方法查询资源,把信号量堵塞了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 46.892
主题: 170
帖子: 9709
注册: 2002年1月
大信 发表于 2020-8-19 10:04
麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动,报错。
代码及报错信息见图片。

问题就出在462行代码的self.process变量。如果不用实例变量而用内部变量,就没问题。
比如把这一段代码中的self.process变量改为myprocess列表,程序就能通过运行,不会报错。

请问为啥不能用实例变量呢?

@闲聊状态 @一个人在途上 @云的南方
请教各位。谢谢!

另外,如果用terminate()方法停止进程,效率如何?进程内部是while True死循环,会不会进程停不下来,或有其他问题?  —— 中途中断进程,不会导致资源被占用,死锁等问题。


虽然我是计算机专业毕业的,但代码写的很差。多进程只会用pool,而且还不会进程间通信。

你问错人了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
benniewang 发表于 2020-8-13 23:37
还有这样的骚操作,第一次听说,学习了。
不过我的计算比较多,io少,csv也够用了,而且excel打开稍微操作操作也方便。


麻烦各位帮我诊断下面这个问题。
我用一个实例变量列表(self.process)保存需要启动的进程,然后调用start()方法启动,报错。
代码及报错信息见图片。

问题就出在462行代码的self.process变量。如果不用实例变量而用内部变量,就没问题。
比如把这一段代码中的self.process变量改为myprocess列表,程序就能通过运行,不会报错。

请问为啥不能用实例变量呢?

@闲聊状态 @一个人在途上 @云的南方
请教各位。谢谢!

以下内容由 大信 于 2020-8-19 10:37 补充
另外,如果用terminate()方法停止进程,效率如何?进程内部是while True死循环,会不会进程停不下来,或有其他问题?  —— 中途中断进程,不会导致资源被占用,死锁等问题。
登录后可直接显示原图
登录后可直接显示原图
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
云的南方 发表于 2020-8-18 16:45
要操作ttjj的话,电脑端的网页操作不是要chromedriver,selenium,验证码识别之类的么,反倒不如usb接个旧手机简单,几十行代码完事。

服务器端写个后台任务,结果放mongodb,什么界面都不需要写,也是几十行代码的事,还稳定
想看结果,直接查数据库
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 23.931
主题: 83
帖子: 1021
注册: 2004年6月
云的南方 发表于 2020-8-18 16:42
官方app,用uiautomator2这个库可以模拟手的操作


手机上直接运行qpython,和temux,对于uiautomator2都没搞定
是台式机usb连接手机,adb的方式
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 23.931
主题: 83
帖子: 1021
注册: 2004年6月
一个人在途上 发表于 2020-8-16 21:44
termux android的终端仿真器

自动化操作放服务器上不好吗,为何要跑手机


要操作ttjj的话,电脑端的网页操作不是要chromedriver,selenium,验证码识别之类的么,反倒不如usb接个旧手机简单,几十行代码完事。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 23.931
主题: 83
帖子: 1021
注册: 2004年6月
大信 发表于 2020-8-16 16:02
Python 怎么在手机上运行? 如果需要交易,券商提供Python接口?


官方app,用uiautomator2这个库可以模拟手的操作
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 46.892
主题: 170
帖子: 9709
注册: 2002年1月
大信 发表于 2020-8-16 16:02
Python 怎么在手机上运行? 如果需要交易,券商提供Python接口?


android可以用qpython
REST JSON 都是通用的
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
大信 发表于 2020-8-17 18:30
我是好奇,如何在安卓、iOS上python编程。
我那个设备网络状态监测程序运行在Windows平台上,因为需要展示界面。
我们行业内部推荐使用PostgreSQL,mariadb就不考虑了。我的程序已经改成了既支持线程又支持进程的版本。

对你的ping程序好奇,希望能互相交流一下。 请看站内短信。

已加
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.186
主题: 58
帖子: 1366
注册: 2006年12月
一个人在途上 发表于 2020-8-16 21:44
termux android的终端仿真器

自动化操作放服务器上不好吗,为何要跑手机


我是好奇,如何在安卓、iOS上python编程。
我那个设备网络状态监测程序运行在Windows平台上,因为需要展示界面。
我们行业内部推荐使用PostgreSQL,mariadb就不考虑了。我的程序已经改成了既支持线程又支持进程的版本。

对你的ping程序好奇,希望能互相交流一下。 请看站内短信。

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
大信 发表于 2020-8-10 17:37
看来你研究得比较深入,能不能帮我解决一个多线程的性能问题?
从网上文档得知,python采用GIL机制实际上是不支持CPU的多核、多线程。虽然python有thread模块实现多线程,但它实际上是假的多线程,不能利用CPU多核的资源。我开始对这个说法深信不疑,但后来我的程序分别在Win7和Win10平台上运行的巨大差异,让我困惑了。

我的程序运行并发了220个左右的多线程,主要负责ping采集数据。在Window 7上运行比较流畅,但是在Windows 10就时常出现卡顿。Windows 7是6年前的旧电脑,i3处理器,3.5GHz,4核,18GB内存。Windows 10是较新的电脑,i7-9700,3GHz,8核心,18GB内存。

通过Windows系统的任务管理器看,程序在Windows 10上运行的时候,只有1个核心负荷非常高,其余7个核资源占用在30%以下。印证了python不支持多核的说法。

而在Windows 7中运行程序,通过任务管理器查看4个核心都在高速运行(见下图)。感觉python也似乎也能利用多核实现真正的多线程? 跟网上的普遍说法矛盾,这究竟是怎么回事?

...


我有个类似的东西,不过是Scala写的,监控几百个节点的运行情况,不停的ping然后记录状态改变的时间,可以生成线路通断时间表,拿来和运营商谈线路状况的
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
大信 发表于 2020-8-14 22:39
花了不到一天的时间终于搞定。
我们行业不准用mysql,有版权风险。
上午研究一阵postgreSQL的二进制版本,摸索系统初始化、建库、建用户、建表。测试import psycopg2,可以连接访问。
下午集中精力把线程改成了进程方式(涉及到数据的保存方式的变化),下班前终于排除bug调试成功。

感受:在python上与多线程相比,多进程效率的确高很多。同样的进程/线程并发数量,1200个设备ping一圈线程平均1.3秒,进程只要0.3秒左右。而且进程还有1200次写数据库操作(线程只需要修改内存列表)。可见线程大部分时间都在等待获取GIL锁。
从操作系统监控画面观察,线程模式CPU占用率大概在30~40%,进程模式几乎100% —— Windows 7上面所有4个核心全部压上。改天在Windows 10上看看效果,看8个CPU是不是都跑起来了。

唯一不爽的是120个进程产生120个数据库连接(需要持续连接),感觉不够优化。

下一步就是研究信号量,看看怎么发号施令控制进程的退出。

最后谢谢楼上各位的热心指点!

补充更正一下,不是8CPU,是单CPU 8核。

mariadb也可以考虑 本帖最后由 一个人在途上 于 2020-8-16 21:48 编辑
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 7.455
主题: 10
帖子: 1257
注册: 2010年1月
大信 发表于 2020-8-16 16:02
Python 怎么在手机上运行? 如果需要交易,券商提供Python接口?

termux android的终端仿真器
以下内容由 一个人在途上 于 2020-8-16 21:45 补充
自动化操作放服务器上不好吗,为何要跑手机
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: Python爱好者俱乐部
功能受限
游客无回复权限,请登录后再试