多线程与计划任务

通常,程序在文件中最后一行代码执行后终止(或调用sys.exit())。

在程序的所有线程终止之前,python程序不会终止。

多线程也可能会导致所谓的并发问题。如果这些线程同时读写变量,导致互相干扰,就会发生并发问题。

为了避免并发问题,绝不让多个线程读取或写入相同的变量。

当创建一个新的Thread对象时,要确保其目标函数只使用该函数中的局部变量。

1
2
3
4
>>>  import  threading
>>> threadObj = threading.Thread(target = print ,args = [ 'a' , 'b' , 'c' ],kwargs = { 'sep' : ' & ' })
>>> threadObj.start()
a & b & c


利用内建的subprocess模块中的Popen()函数,python程序可以启动计算机中的其他程序。

如果打开一个应用程序的多个实例,每个实例都是同一个程序的不同进程。

每个进程可以有多个线程。不像线程,进程无法直接读写另一个进程的变量。

返回值是一个Popen对象,它有两种可用的方法:poll()和wait()。

如果这个进程在poll()调用时仍在运行,poll()方法就返回None。如果该程序已经终止,它会返回该进程的整数退出代码。退出代码用于说明进程是无错终止(退出代码为0),还是一个错误导致进程终止。

wait()方法将阻塞,直到启动的进程终止。它的返回值是进程的整数退出代码。

可以向Popen()传递一个列表,作为唯一的参数。该列表中的第一个字符串是要启动的程序的可执行文件名,所有后续的字符串将是该程序启动时,传递给该程序的命令行参数。实际上,这个列表将作为被启动程序的sys.argv的值。

1
2
3
4
>>>  import  subprocess
>>> subprocess.Popen( '/usr/bin/pwd' )
/ root
<subprocess.Popen  object  at  0x7f9e39d23438 >


计划任务:Task Scheduler(windows)、launchd(OS X)、cron(linux)


webbrowser.open()函数可以从程序启动web游览器,打开指定的网站。


可以在python中启动另一个python脚本,就像任何其他的应用程序一样。只需要向Popen()传入python.exe可执行文件,并将想运行的.py脚本的文件名作为它的参数。

不同于将python程序导入为一个模块,如果python程序启动了另一个python程序,两者将在独立的进程运行,不能分享彼此的变量。


每个操作系统都有一个程序,其行为等价于双击文档文件来打开它。在windows上,这是start程序。在OS X上,这是open程序。在ubuntu linux上,这是see程序。

1
2
>>>  import  subprocess
>>> subprocess.Popen([ 'start' , 'hello.txt' ],shell = True )


Unix哲学:编写小的、目的有限的、能互操作的程序,胜过大的、功能丰富的应用程序。













本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/2071843,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值