time.sleep(secs)函数会挂起线程secs秒,只对当前线程起作用。放在一个线程里并不会影响其他线程运行。测试代码如下:
import threading
import time
def thread1():
while True:
time.sleep(1)
print(time.strftime('%H:%M:%S'),'hahaha')
def thread2():
while True:
time.sleep(2)
print(time.strftime('%H:%M:%S'),'lalala')
thread_thred1 = threading.Thread(target=thread1)
thread_thred1.start()
thread_thread2 = threading.Thread(target=thread2)
thread_thread2.start()
结果如下,两个线程里的time.sleep()互不影响。
19:24:08 hahaha
19:24:09 hahaha
19:24:09 lalala
19:24:10 hahaha
19:24:11 lalala
19:24:11 hahaha
19:24:12 hahaha
19:24:13 lalala
time.sleep(secs)函数会挂起线程secs秒,只对当前线程起作用。放在一个线程里并不会影响其他线程运行。测试代码如下:import threadingimport timedef thread1(): while True: time.sleep(1) print(time.strftime('%H:%M:%S'),'hahaha')...
这里就不说什么高深莫测的专业术语了,一句话,在泡澡的同时喝咖啡。也就是说在代码
中
同时让多个区域的代码或者说函数同时运行以此达到提高效率的目的。
比如我们有这样一场比赛,小明和小红在做跑步测试,现在他们身上都要一个计时器用于计时。这是他们一个一个测试。就像下面的代码一样。
import
thread
ing
import
time
time
0=
time
.
time
()
def print_ming():
time
.
sleep
(5)
print('我是小明我跑完了')
def print_hong():
time
.
sleep
(3)
print('
这是一个
多线程
抓取知乎用户的程序
Requirements
需要用到的包: beautifulsoup4 html5lib image requests redis PyMySQL
pip安装所有依赖包:
pip install Image requests beautifulsoup4 html5lib redis PyMySQL
运行环境需要支持
中
文
测试运行环境
python
3.5,不保证其他运行环境能完美运行
1.需要安装mysql和redis
2.配置config.ini文件,设置好mysql和redis,并且填写你的知乎帐号(master分支新版爬虫不需要登陆,但是可能会有时效问题,可以切换至new-ui分支
使用
)
可以通过配置config.ini文件下的[sys]
sleep
_
time
控制爬虫速度(尽量
使用
推荐值,过快容易被知乎封禁),
thread
_num配置线程数目
3.向数据库导入init.sql
开始抓取数据:
python
get_user.py 查看抓取数量:
python
check_redis.py
def a():
#for i in range(5):
print('Program a is running... at ', c
time
(),u'.线程名为:',
thread
ing.current_
thread
().name )
time
.
sleep
(0.2)
def b(x):
#for i in range(5):
print('Program b('+x+')
Python
中
的时间除了可以计算外,在延迟和暂停方面也有所涉及。之前学爬虫的时候用的是暂停功能,那么在
多线程
中
为了使线程之间的有序运行,我们通常会
使用
time
.
sleep
()对其
中
的一个线程进行阻拦挂起。下面我们就
time
.
sleep
()的概念、语法、参数、返回值、在线程
中
的实例带来介绍。
sleep
() 方法暂停给定秒数后执行程序。该参数可以是一个浮点数来表示一个更精确的睡眠时间。
实际
中
止时间可能不到所请求的,因为任何捕获信号将终止
sleep
()接下来执行该信号捕捉的程序。
多线程
:在同一个时间做多件事
守护线程:如果在程序
中
将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为
thread
.setDaemon(True),要在
thread
.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。
thread
.join():在子线程完成运行之前,该子线程的父线程(一般就是主线程)将一直存在,也就是被阻塞
#!/usr/bin/
python
# encoding: utf-8
import
thread
ing
from
time
import c
time
,
sleep
def func1():
count=0
1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2.一个进程由一个或多个线程组成,线程是一个进程
中
代码的不同执行路线
3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些速程投的资源(的开网年为罐号等),某进程内的线程在其他进程不可见;
4.调度和切换:线程上下文切换比进程上下文切换要快得多
import
thread
ing
t_sing =
thread
ing.
Thread
(target=much_run.
time
在
Python
中
,`
time
.
sleep
()`函数的优先级取决于线程和进程调度器。当调用`
time
.
sleep
()`时,当前线程会暂停执行指定的时间,但是其他线程和进程仍然可以运行。
在单线程环境
中
,`
time
.
sleep
()`函数会阻塞整个程序,直到指定时间结束。
在
多线程
和多进程环境
中
,`
time
.
sleep
()`函数只会影响当前线程或进程,其他线程和进程仍然可以继续执行。同时,线程和进程的优先级也会影响`
time
.
sleep
()`函数的执行。如果当前线程或进程的优先级较低,那么其他优先级更高的线程或进程可能会在`
time
.
sleep
()`函数执行期间得到更多的CPU时间。
总之,`
time
.
sleep
()`函数的优先级取决于当前线程或进程的优先级以及其他正在运行的线程和进程的状态。