多线程与计划任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程与计划任务相关的知识,希望对你有一定的参考价值。

通常,程序在文件中最后一行代码执行后终止(或调用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哲学:编写小的、目的有限的、能互操作的程序,胜过大的、功能丰富的应用程序。


以上是关于多线程与计划任务的主要内容,如果未能解决你的问题,请参考以下文章

多线程 Thread 线程同步 synchronized

多个请求是多线程吗

进程与计划任务管理

多个用户访问同一段代码

详解C++多线程

300 行代码带你秒懂 Java 多线程!| 原力计划