标签:阻塞 变量 ace 避免 pen 文件 port /usr 导入
通常,程序在文件中最后一行代码执行后终止(或调用sys.exit())。在程序的所有线程终止之前,python程序不会终止。
多线程也可能会导致所谓的并发问题。如果这些线程同时读写变量,导致互相干扰,就会发生并发问题。
为了避免并发问题,绝不让多个线程读取或写入相同的变量。
当创建一个新的Thread对象时,要确保其目标函数只使用该函数中的局部变量。
>>> 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的值。
>>> 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程序。
>>> import subprocess >>> subprocess.Popen(['start','hello.txt'],shell=True)
Unix哲学:编写小的、目的有限的、能互操作的程序,胜过大的、功能丰富的应用程序。
标签:阻塞 变量 ace 避免 pen 文件 port /usr 导入
原文地址:http://blog.51cto.com/juispan/2071843