Study python Day07

本文探讨了Python中线程间的通信机制,包括Event和Condition的使用,展示了如何实现线程间的同步和唤醒。同时,文章还提供了一个正则表达式的实例,用于从文本中精确匹配特定字符串。

线程通信强化

import threading
import time

def goevent():
    e = threading.Event()  # 事件

    def go():
        for i in range(10):
            e.wait()  # 等待事件,线程卡顿,等待set消息,只调用一次
            e.clear() # 重置线程等待
            print("go",i)

    threading.Thread(target=go).start() # 创建一个线程
    return e

t = goevent()
for i in range(5):
    time.sleep(i)
    t.set()

在这里插入图片描述

condition线程通讯与事件

import threading
import time


def go1():
    with cond:
        for i in range(10):
            time.sleep(1)
            print(threading.current_thread().name, i)
            if i == 5:
                cond.wait()  # 等待,只有在其他相同线程条件变量唤醒时才继续执行
                print("hahahha")

def go2():
    with cond:  # 使用条件变量
        for i in range(10):
            time.sleep(1)
            print(threading.current_thread().name, i)
        cond.notify()  # 通知唤醒其他线程

cond = threading.Condition()  # 线程条件变量
threading.Thread(target=go1).start()
threading.Thread(target=go2).start()

 wait():此方法释放底层的锁,然后阻塞,直到它通过notify()或notify_all()调用唤醒相同的条件在另一个线程中变量,或直到发生可选的超时。一旦唤醒或超时,它重新获得锁定并返回。
 
notify():在这种情况下唤醒一个或多个线程,如果有的话,如果调用线程没有获得这个方法的锁称为,引发了一个RuntimeError。这个方法至多唤醒n个等待条件的线程变量; 如果没有线程正在等待,那么这是一个无操作。


import threading
import time


def go1():
    with cond:
        for i in range(0, 10, 2):
            time.sleep(1)
            print(threading.current_thread().name, i)
            cond.wait()
            # print("hahah")
            cond.notify()


def go2():
    with cond:
        for i in range(1, 10, 2):
            time.sleep(1)
            print(threading.current_thread().name, i)
            cond.notify()
            cond.wait()


cond = threading.Condition()  # 线程条件变量
threading.Thread(target=go1).start()
threading.Thread(target=go2).start()
1.wait()调用后下面的程序是不会运行的,
2.线程1线绑定cond,打印出0后,线程1进入等待(注意此时线程2并没有绑定),线程2绑定cond,打印出1后 notify给线程1唤醒wait(),(此时才打印出"haha"),同时线程2的wait激活进入等待,同时1打印出2,并唤醒线程2如此循环

正则表达式
在这里插入图片描述

举例

hello world and you are a beautiful girl
截取beautiful girl

import re
s = 'hello world and you are a beautiful girl'
regex = re.compile('^h.*(b.*)')
res = regex.findall(s)
print(res)


结果:['beautiful girl']

<!DOCTYPE html>
<html lang="zh-cn">

      padding-right:5px;
      font-family: Microsoft YaHei ! important;

	<thead>
	<tr>
		<th>
			IP地址
		</th>
		<th>
			端口
		</th>
		<th>
			地理位置
		</th>
		<th>
			运营商
		</th>
		<th>
			最后检测
		</th>
	</tr>
	</thead>
	<tbody>
	<tr>
		<td>
			115.238.59.86		</td>
		<td>
			37600		</td>
		<td>
		    浙江省杭州市		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			112.87.71.196		</td>
		<td>
			9999		</td>
		<td>
		    江苏省南通市		</td>
		<td>
			联通		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			14.29.232.142		</td>
		<td>
			8082		</td>
		<td>
		    广东省广州市		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			39.137.69.10		</td>
		<td>
			80		</td>
		<td>
		    北京市		</td>
		<td>
			移动		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			42.159.91.248		</td>
		<td>
			8080		</td>
		<td>
		    北京市		</td>
		<td>
			世纪互联微软云Windows Azure数据中心		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			163.204.240.157		</td>
		<td>
			9999		</td>
		<td>
		    广东省韶关市		</td>
		<td>
			联通		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			27.38.155.156		</td>
		<td>
			8118		</td>
		<td>
		    广东省深圳市		</td>
		<td>
			联通		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			175.43.59.41		</td>
		<td>
			9999		</td>
		<td>
		    福建省泉州市		</td>
		<td>
			联通		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			125.62.27.53		</td>
		<td>
			3128		</td>
		<td>
		    重庆市		</td>
		<td>
			广电网		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			183.164.238.79		</td>
		<td>
			9999		</td>
		<td>
		    安徽省淮北市		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			218.91.94.156		</td>
		<td>
			9999		</td>
		<td>
		    江苏省扬州市		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			113.121.23.247		</td>
		<td>
			9999		</td>
		<td>
		    山东省烟台市		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			119.122.213.89		</td>
		<td>
			9000		</td>
		<td>
		    广东省深圳市宝安区		</td>
		<td>
			电信		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			123.206.200.63		</td>
		<td>
			1080		</td>
		<td>
		    北京市		</td>
		<td>
			腾讯云		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>
	<tr>
		<td>
			120.26.208.102		</td>
		<td>
			88		</td>
		<td>
		    浙江省杭州市		</td>
		<td>
			阿里巴巴网络有限公司BGP数据中心(BGP)		</td>
		<td>
			2019/08/29 19:45:02		</td>
	</tr>

        </div>

        <dd>
			代理总量:2877个
        </dd>
        <dd>
			大陆代理:536个
        </dd>
        <dd>
			国际代理:2341个
        </dd>
      </dl>          <div class="fly-panel fly-link">
        <h3 class="fly-panel-title">友情链接</h3>
        <dl class="fly-panel-main">
          <dd><a href="http://www.qydaili.com/" target="_blank">高效代理IP</a></dd><dd>
  

正则表达式:.(.)

在这里插入图片描述

【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)内容概要:本文介绍了基于模型预测控制(MPC)的凸优化算法在电动车优化调度中的应用,并提供了Matlab代码实现。该方法结合了MPC的滚动优化特性与凸优化的高效求解能力,用于解决电动车充电调度问题,提升电网运行效率与可再生能源消纳能力。文中还提及多个相关研究方向和技术支撑,包括智能优化算法、机器学习、电力系统管理等,展示了其在多领域交叉应用的潜力。配套资源可通过提供的网盘链接获取,涵盖YALMIP工具包及其他完整仿真资源。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的科研人员和研究生,尤其适合从事电动汽车调度、智能电网优化等相关课题的研究者。; 使用场景及目标:①实现电动车集群在分时电价或电网需求响应机制下的有序充电调度;②结合可再生能源出力与负荷预测,利用MPC进行多时段滚动优化,降低电网峰谷差,提高能源利用效率;③为学术论文复现、课题研究及工程仿真提供可靠的技术路线与代码支持。; 阅读建议:建议读者结合文档中提到的智能优化算法与电力系统背景知识进行系统学习,优先掌握MPC基本原理与凸优化建模方法,并下载配套资源调试代码,以加深对电动车调度模型构建与求解过程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值