参考:
https://mediatek-marketing.files.svdcdn.com/production/documents/MediaTek_White-Paper-R17-5G.pdf
空闲状态
连接状态
由图可见在非连接状态下可节能20%左右,在通话状态下可节能30%左右,在高负载状态下可节能23%左右。以上数据都是与3GPP R16相比较。
Views: 101
1,try…except…
try:
while True:
time.sleep(100)
except KeyboardInterrupt:
print('Got signal: SIGINT, shutting down.')
exit(0)
2, 信号处理
def handler(signal_received, frame):
# Handle any cleanup here
if signal_received == signal.SIGINT:
print('SIGINT or CTRL-C detected. Exiting gracefully')
exit(0)
if __name__ == '__main__':
signal.signal(signal.SIGINT, handler=handler) # ctlr + c
建议用try…except的方法,通用性强,代码易读性高。
Views: 61
当使用阻塞式UDP socket时无法执行多任务处理,也无法与用户交互,甚至不能响应ctrl+c中断。为了解决这些问题所以要用非阻塞式udp通信。
1,多线程法
import socket
import signal
import threading
import time
def handler(signal_received, frame):
# Handle any cleanup here
if signal_received == signal.SIGINT:
print('SIGINT or CTRL-C detected. Exiting gracefully')
exit(0)
def task(host, port):
print("udp server is listen on " + str(host) + ':' + str(port))
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print("from %s received message: %s" % (addr, data))
if __name__ == '__main__':
signal.signal(signal.SIGINT, handler=handler) # ctlr + c
UDP_IP = "0.0.0.0"
UDP_PORT = 5005
t = threading.Thread(target=task, args=(UDP_IP, UDP_PORT))
t.daemon = True
t.start()
while True:
time.sleep(100)
2, 协程法
官方文档说不要在应用中使用asyncio,而是应该在框架中用
import asyncio
class EchoServerProtocol:
def __init__(self, message, on_con_lost):
self.message = message
self.on_con_lost = on_con_lost
self.transport = None
def connection_made(self, transport):
self.transport = transport
def datagram_received(self, data, addr):
print('Received %r from %s' % (data.decode(), addr))
self.transport.sendto(data, addr)
def error_received(self, exc):
print('Error received:', exc)
def connection_lost(self, exc):
print("Connection closed")
self.on_con_lost.set_result(True)
async def main():
print("Starting UDP server")
# Get a reference to the event loop as we plan to use
# low-level APIs.
loop = asyncio.get_running_loop()
on_con_lost = loop.create_future()
message = 'Hello World!'
# One protocol instance will be created to serve all
# client requests.
transport, protocol = await loop.create_datagram_endpoint(
lambda: EchoServerProtocol(message, on_con_lost=on_con_lost),
local_addr=('127.0.0.1', 9999),
remote_addr=('127.0.0.1', 5005))
try:
while True:
await asyncio.sleep(10) # Serve for 1 hour.
finally:
transport.close()
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Got signal: SIGINT, shutting down.')
exit(0)
Views: 89
该表默认以国际货币基金组织(IMF)公布的各国家或地区的最新估计值进行排名。如果IMF未能提供某个国家或地区的最新数据,则使用世界银行或联合国提供的最新数据排名。您也可选择列表中的Sort both.gif图标以选择其中一个来源重新排名。
最左栏的排名数字不包括地区和非IMF成员国(在列表中使用 背景色 标记)。
注:以下国家和地区无数据:福克兰群岛、直布罗陀、根西行政区、圣座(梵蒂冈)、泽西、纽埃、皮特凯恩群岛、圣赫勒拿、阿森松和特里斯坦-达库尼亚、托克劳和西撒哈拉。
Views: 46
其它有用的插件:
https://plugins.jenkins.io/pipeline-utility-steps/ Pipeline Utility Steps 常用steps集合
https://plugins.jenkins.io/inline-pipeline/ Multibranch Pipeline Inline Definition 支持内联Jenkinsfile
https://plugins.jenkins.io/pipeline-multibranch-defaults/ Multibranch with defaults 支持不同分支和项目共用Jenkinsfile
https://plugins.jenkins.io/config-file-provider/ Config File Provider 用于配置文件
存储
https://plugins.jenkins.io/permissive-script-security/ Permissive Script Security
注意:
gitlab连接中配置的用户必须是git项目的成员,否则即使能拉取代码也无法同步jenkins的构建状态到gitlab
用curl调用gitlab api(测试access token及api是否有效)
curl –request POST \
–header “PRIVATE-TOKEN: glpat-1234567890” \
–url “https://git.hetao.me/api/v4/projects/test%2Ftest/statuses/3212877acf1bb58f05818c95cd981ef243e935d8?state=success”
Views: 26
正则表达式是在文本中寻找子字符串的一种模式。
Groovy中正则表达式定义是通过 ~'正则表达式'
定义的
def regex =~'chese'
表达式 | 匹配意义 | 示例 |
---|---|---|
^ | 常用正则表达式 | |
$ | 行尾。与字符串的尾部或换行符之前的位置相匹配。不包括换行符本身 | |
. | 匹配除换行符以外的任意一个字符 | |
\w | 字母和数字 | [0-9A-Za-z] |
\W | 非字母和数字。\w以外的单个字符 | |
\s | 空字符 | [\t\n\r\f] |
\S | 非空字符 | |
\d | 数字 | [0-9] |
\D | 非数字 | |
[] | 指定字符范围 | 如:[0-9] |
* | 前面元素至少出现0次 | |
+ | 前面元素至少出现1次 | |
{m} | 前面的元素出现m 次 | |
{m,} | 前面的元素至少出现m 次 | |
{m,n} | 前面的元素出现至少m 次,至多n 次 | |
| | 选择,匹配其中的任何一个 | (a|b)*指a或b出现任意次 |
() | 正则表达式的群组化 | (ab)* 指ab出现任意次 |
[\u4E00-\u9FA5] | 汉字 | |
[^\u4E00-\u9FA5] | 非汉字 |
运算符
==~
)用于检查字符串是否匹配 返回true或false
如:
if( "abc" ==~ /abc/)
{
println 'true'
}
else
{
println 'flase'
}
=~
)用于在字符串中查找匹配的子字符串
def string = "id=12345"
def matcher = string =~ /id=/
def id = matcher.replaceAll('')
println id //运行结果为:12345
转自:https://www.cnblogs.com/sky_online/archive/2010/05/14/1735712.html
Views: 17
注意:以上证书和配置文件需要权限正确
参考:
https://help.sonatype.com/repomanager3/nexus-repository-administration/capabilities/base-url-capability
https://www.cnblogs.com/Smbands/p/14430775.html
附件:
nexus的docker-compose.yaml配置
services:
nexus:
image: sonatype/nexus3
restart: always
hostname: nexus
ports:
- "8081:8081/tcp"
- "8082:8082/tcp"
- "8083:8083/tcp"
- "8084:8084/tcp"
- "8085:8085/tcp"
- "80:8081/tcp"
- "443:8443/tcp"
volumes:
- ./data:/nexus-data
- ./deploy:/opt/sonatype/nexus/deploy
- ./ssl:/opt/sonatype/nexus/etc/ssl
- ./jetty-https.xml:/opt/sonatype/nexus/etc/jetty/jetty-https.xml
- /etc/localtime:/etc/localtime
Views: 174
参考:
https://help.sonatype.com/repomanager3/nexus-repository-administration/repository-management/cleanup-policies
Views: 59
def a = null
if (!a)
println('a is empty')
在groovy中null,false,”,0的布尔运算结果都是false,同样可以用!a进行反向判断
Views: 16
Compress-Archive -LiteralPath a.txt,b.txt -DestinationPath a.zip #仅打包文件,忽略路径
Compress-Archive -Path a -DestinationPath a.zip
Compress-Archive -Path a\*.txt -DestinationPath a.zip
参考:
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/compress-archive?view=powershell-7.3
Views: 15