业务服务器192.168.1.2访问192.168.1.3数据接口, 无法正常返回数据, 请根据以上信息写出排查思路。
pass
请实现一个简单的socket编程。
'''
要求:
1.实现server端的功能即可
2.遵循基本语言编程规范
'''
# 答案:
# 服务端:
# coding=utf-8
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 8888))
server.listen(5)
#等待客户端连接
while True:
(client, address) = server.accept()
data = client.recv(4096)
print data
client.send("hello")
client.close()
# 客户端
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 8888))
client.send("My name is client")
message = client.recv(4096)
print message
client.close()
谈一下对于多线程编程的理解, 对于CPU密集型怎样使用多线程, 说说线程池, 线程锁的用法, 有没有用过multiprocessing或concurrent.future?
# 答案:
'''
CPU密集型使用多进程
IO密集型使用多线程
加锁
锁定
释放
'''
关于守护线程的说法, 正确的是
'''
A.所有非守护线程终止, 即使存在守护线程, 进程运行终止
B.所有守护线程终止, 即使存在非守护线程, 进程运行终止
C.只要有守护线程或者非守护线程其中之一存在, 进程就不会终止
D.只要所有的守护线程和非守护线程中终止运行之后, 进程才会终止
'''
# 答案:
A
TCP协议在每次建立或者拆除连接时, 都要在收发双方之间交换()报文
'''
A.一个
B.两个
C.三个
D.四个
'''
# 答案:
C
口述多进程开发中join与deamon的区别
# 答案:
'''
p.join([timeout]):主线程等待p终止(强调:是主线程处于等的状态,而p是处于运行的状态)。timeout是可选的超时时间,需要强调的是,p.join只能join住start开启的进程,而不能join住run开启的进程
p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
'''
请简述GIL对Python性能的影响
# 答案:
'''
GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行字节码。
线程释放GIL锁的情况:
在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL
Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)或Python 2.x,tickets计数达到100
Python使用多进程是可以利用多核的CPU资源的。
多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁
'''
曾经在哪里使用过: 线程、进程、协程?
# 答案:
'''
1.在写高并发的服务端代码时。
2.在写高性能爬虫的时候。
'''
请使用yield实现一个协程?
# 答案:
import time
import queue
def consumer(name):
print("--->starting eating baozi...")
while True:
new_baozi = yield
print("[%s] is eating baozi %s" % (name,new_baozi))
#time.sleep(1)
def producer():
r = con.__next__()
r = con2.__next__()
n = 0
while n < 5:
n +=1
con.send(n)
con2.send(n)
print("\033[32;1m[producer]\033[0m is making baozi %s" %n )
if __name__ == '__main__':
con = consumer("c1")
con2 = consumer("c2")
p = producer()
请使用python内置async语法实现一个协程?
# 答案:
from datetime import datetime
import asyncio
async def add(n):
print(datetime.now().strftime('%H:%M:%S.%f'))
count = 0
for i in range(n):
count += i
print(datetime.now().strftime('%H:%M:%S.%f'))
return count
async def fun(n):
res = await add(n)
print(f'res = {res}')
loop = asyncio.get_event_loop()
tasks = [fun(20000000), fun(30000000)]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()