码迷,mamicode.com
首页 > 编程语言 > 详细

多线程与计划任务

时间:2018-02-18 21:03:22      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:阻塞   变量   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!