#!/usr/bin/env python
#!coding=utf-8
#锁定操作
import socket , traceback , os, sys, fcntl, time
import signal
#fcntl
"""
flock(FH,LOCK_EX|LOCK_SH|LOCK_UN)
LOCK_EX 独占锁,排他锁
LOCK_SH 共享锁
LOCK_UN 对文件解锁
"""
def getlastaccess(fd , ip):
fcntl.flock(fd, fcntl.LOCK_SH) #
try:
fd.seek(0)
for line in fd.readlines():
fileip , assesstime = line.strip().split("|")
if fileip == ip:
return assesstime
return None
finally:
print"in getlastaccess finally"
fcntl.flock(fd, fcntl.LOCK_UN) #解除锁,释放锁
def writelastaccess(fd, ip):
print fcntl.flock(fd, fcntl.LOCK_EX)
records = []
try:
fd.seek(0)
for line in fd.readlines():
fileip , accesstime = line.strip().split("|")
if fileip!=ip:
records.append((fileip,accesstime))
fd.seek(0)
for fileip , accesstime in records + [(ip , time.asctime())]:
fd.write("%s|%s\n" %(fileip, accesstime))
fd.truncate()
finally:
print "in writelastaccess finally "
fcntl.flock(fd, fcntl.LOCK_UN)
def reap(signum , stackframe):
while 1:
try:
result = os.waitpid(-1, os.WNOHANG)
if not result[0]:
break
except:
break
print "reaped child process %d"%(result[0])
host=''
port = 9002
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
fd = open("lastaccess.txt", "w+")
while 1:
try:
clientsock, clientaddr = s.accept()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
continue
signal.signal(signal.SIGCHLD, reap)
pid = os.fork()
if pid:
clientsock.close()
continue
else:
s.close()
try:
print "got connection from %s ,servicing with pid %d"%\
(clientsock.getpeername(), os.getpid())
ip = clientsock.getpeername()[0]
clientsock.sendall("welcome ,%s \n" % ip)
last = getlastaccess(fd, ip)
if last:
clientsock.sendall("i last saw you at %s.\n" %last)
else:
clientsock.sendall("i've never seen you before.\n")
writelastaccess(fd, ip)
clientsock.sendall("i have noted your connection at %s.n"%\
getlastaccess(fd, ip))
except (KeyboardInterrupt, SystemExit):
raise
except:
traceback.print_exc()
#time.sleep(10)
try:
clientsock.close()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
sys.exit()
相关推荐
Python 锁的使用 在多线程编程中,同步机制是至关重要的,它确保了对共享资源的有序访问,防止数据竞争和不一致状态的发生。Python 提供了多种同步工具,其中最基础的是锁(Lock),它能确保同一时刻只有一个线程...
python在windows锁屏的代码,只要环境安装好了,切换到脚本目录下,就可以锁屏你的计算机,请多多支持,谢谢!
### 浅谈Python锁与死锁问题 #### 一、引言 锁是多线程编程中的重要概念,用于同步不同线程之间的访问,确保共享资源的安全性。Python中的锁机制能够有效地帮助开发者处理并发环境下的资源共享问题。本文将详细...
python3+pyqt5 源码 python挂机锁源码网络上不多,很有参考价值 注释超多,一看就懂 屏蔽按键 窗口背景更换 窗口透明设置 文件包含源码 及打包好的exe,背景图片 一个py文件,一个窗口搞定,不浪费资源。
**时间锁程序(TimeLock)**是基于Python编程语言实现的一种安全机制,它允许用户对文件或程序设置一个时间限制,只有当达到预设的特定日期时,才能访问或执行这些内容。这种功能在创建惊喜礼物、保密项目或限时活动...
"Python代码安装程序体验锁"是一个针对此问题的解决方案,尤其适用于私活项目。它允许开发者为交付给客户的程序添加一层安全防护,使得客户在初次使用时可以有一定的体验次数,一旦体验次数用尽,就需要进行购买或者...
当你重命名或删除一个文件/文件夹时,Windows 弹出对话框提示你“无法删除 xxx:它正在被其它用户/程序使用!”,怎么办?使用 Unlocker 你就可以轻松、方便、有效地解决这个虽小但很烦人的问题!...
在Python自动化测试领域,Selenium库是一个广泛使用的工具,它允许开发者模拟用户行为来测试Web应用。本文将深入探讨如何使用Selenium和JQuery在Python中实现滑动解锁功能。滑动解锁通常用于增强移动应用或网页的...
本文研究的主要是python使用锁访问共享变量,具体介绍和实现如下。 python 做多线程编程时,多个线程若同时访问某个变量,可能会对变量数据造成破坏,pyhon中的threading模块提供了lock对象,lock中的acquire方法...
我们通过selenium 的webdriver来实现滑动解锁,主要依赖PIL库实现图片比对
### Python3之多线程及线程锁的基础用法 #### Python 多线程库简介 Python 提供了两种方式来支持线程:_thread 和 threading。其中,_thread 库提供了一个较为基础且底层的支持,它包含了创建简单线程的基本功能...
redlock-py, 在 python 中,Redis分布式锁 redlock - python 中的分布式锁这个 python 库实现了基于redis的分布式锁管理器算法( ) 。要创建锁定管理器:dlm = Redlock([{"host":"localhost","port":
很好用的软件,能解锁被锁住的pdf,实现和pdf修改和打印
电脑屏幕保护锁
9. **并发与并行**:讲解Python的线程、进程和异步编程模型,如GIL(全局解释器锁)的影响和解决策略。 10. **扩展Python**:讨论如何用C或C++编写Python扩展模块,以实现Python与C的交互。 通过这本书,读者不仅...
Android屏幕解锁图案破解 Python代码
面试者应了解Python的性能瓶颈,如GIL(全局解释器锁)的影响,以及如何使用cProfile等工具分析和优化代码性能。 通过深入学习和理解《Python面试宝典》中的知识点,并结合实际编程经验,Python程序员可以在面试中...
需要注意的是,由于全局解释器锁(GIL),Python的多线程在CPU密集型任务上可能不如多进程有效。 【Python中的socket编程】 Python的socket模块用于网络通信,可以创建客户端和服务器端的套接字,实现TCP和UDP协议...
7. **多线程与多进程**:Python的全局解释器锁(GIL)限制了多线程并行执行,但可以通过多进程实现真正的并行。了解何时使用threading模块,何时使用multiprocessing模块,以及如何利用concurrent.futures框架。 8. *...