用定时器做,1秒钟唤醒一次响应函数,不要用延时函数 sleep
# 定义时间显示
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.act_displayTM) #绑定响应函数
self.timer.setInterval(1000) #设置时间间隔
self.timer.start()
# 定时响应事件对应逻辑
def act_displayTM(self):
s_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
self.ui.label_Date.setText(s_time)
return
很简单,新建一个线程即可
import threading
def input_func( context ):
context[ 'data' ] = input( 'input:' )
context = { 'data' : 'default' }
t = threading.Thread( target = input_func ,args = ( context , ) )
t.start( )
t.join( 10 ) #等待10秒
print( context )
自从工作了就好久没发博客,还是出来冒个泡=。=
前段时间写的一个项目需要用python的subprocess.Popen大量调用某shell命令,运行到一定量级之后就会产生内存溢出,造成大量线程阻塞,然后就会造成([Errno 24] Too many open files)这个异常。
网上有人说是close_fds=True这个参数在python2.x默认没打开,这个参数可以关闭文件描述符,试了没有作用。
后来在国外某个人的帖子找到了和我类似的问题,解决办法就是执行后把stdin,stdout,stderr3个流进行清空即可。
结合网上的资料,写了一个可以自定义超时时间调用subprocess.Popen执行shell命令的函数(自定义超时为了避免某些shell卡死的情况),用这个函数去调用subprocess.Popen就不会产生上面这些问题了。
def timeout_command(command, timeout):
start = datetime.datetime.now()
process = subprocess.Popen(command, bufsize=10000, stdout=subprocess.PIPE, close_fds=True) while process.poll() is None:
time.sleep(0.1)
now = datetime.datetime.now() if (now - start).seconds timeout: try:
process.terminate() except Exception,e: return None
return None
out = process.communicate()[0] if process.stdin:
process.stdin.close() if process.stdout:
process.stdout.close() if process.stderr:
process.stderr.close() try:
process.kill() except OSError: pass
return out
使用try...except来对urlopen出错进行控制,通过socket模块的setdefaulttimeout函数来控制超时时间,python3.x示例代码如下:
import urllib.request
import socket
socket.setdefaulttimeout(10) #设置超时时间
#要下载的网页列表
urls = ['',
'',
'',
'',
'',
'']
for url in urls:
try:
html = urllib.request.urlopen(url)
#处理得到的网页
except:
#出错处理
很简单,新建一个线程即可
import threading
def input_func( context ):
context[ 'data' ] = input( 'input:' )
context = { 'data' : 'default' }
t = threading.Thread( target = input_func ,args = ( context , ) )
t.start( )
t.join( 10 )#等待10秒
print( context )
众所周知,Python内建了许多函数模块,并且我们可能还会安装许多第三方模块等等。
下面以getpass为例查看其源代码。
1.help(getpass)
输入该命令找到file路径,并且可以查看其其提供的功能。
2.利用getpass.__file__查看位置
最后找到该文件,用记事本或其他编辑器打开即可。
3.PyCharm编辑器
在该类或 *** 上按住“ctr+鼠标左键”可以快速查看源代码。
4.dir(对象名)
该 *** 可以快速查看有哪些 *** 。
想要查看每个功能的解释,用help(type(对象名))
python学习网,大量的免费python视频教程,欢迎在线学习!