日期: 2021 年 4 月 10 日

腾讯云虚拟机如何发邮件?

cajp0208 · 184 天前 · 3258 次点击
这是一个创建于 184 天前的主题,其中的信息可能已经有所发展或是发生改变。
腾讯云虚拟机如何发邮件?需求不大,偶尔一天发一两封的样子
虚拟 邮件 腾讯 样子24 条回复 • 2020-10-09 16:18:39 +08:00
chinvo 1
chinvo 184 天前 via iPhone
发工单开 25
qzy168 2
qzy168 183 天前
发工单开 25 端口。

腾讯云轻量和限时秒杀活动部分云主机配置与价格: https://v2ex.com/t/711197
TimePPT 3
TimePPT 183 天前 via Android
https://sendcloud.sohu.com/price.html
sendcloud,一天 10 封免费额度
815979670 4
815979670 183 天前 ❤️ 1
阿里云一天 100 封 免费额度
opengps 5
opengps 183 天前
怎么 1,2 楼上来就是开 25 端口?解决问题不一定必须要自建一套邮局,2 楼也犯不着非得引导付费渠道
大部分邮箱都支持客户端发邮件的,自己写程序发送也不是难事
hefish 6
hefish 183 天前
自己调用 qqmail 的 smtp 不行吗?
solos 7
solos 183 天前
试下这个 https://www.hedwi.com dkim 、spf 、dmarc 、反向解析都做了
natashahollyz 8
natashahollyz 183 天前 via iPhone
@qzy168 境外能打折吗?非大陆就行,不想备案
ShallowAi 9
ShallowAi 183 天前 via Android ❤️ 1
腾讯企业邮箱 免费 100 封 /日 不需要开 25 端口
用他的 smtp 就行
hancc 10
hancc 183 天前
用 465 端口

EminemW 11
EminemW 183 天前 via iPhone
开锤子端口,写个脚本发邮件不就得了
vuuv 12
vuuv 183 天前 via Android
@opengps #5 搜了下,好像是因为滥发问题,所以国内外云服务商都选择默认全局把出方向的 25 端口封了。也都可以申请解封。
opengps 13
opengps 183 天前 via Android
@vuuv 差不多。域名,自建邮局等成本很低,所以滥发邮件的问题很严重
unclemcz 14
unclemcz 183 天前
@815979670 阿里邮件推送每天有 200 封免费额度;
@hefish 我被 qq 邮箱封过 smtp,绑定了已备案域名,日均十来封的样子发了 1 年左右,用于自己网站用户注册后发邮件提醒注册成功,然后有一天突然就 550 Mail content denied,发信给腾讯客服( mailteam@qq.com ),客服让我提供日志,我提供了错误日志,然后再也没有回复过我;后切换到阿里云邮件推送,至今为止还算稳定。
mooyo 15
mooyo 183 天前
找个域名绑定到腾讯企业邮箱,然后自己给自己分配账号就可以用他们的接口发了吧
mooyo 16
mooyo 183 天前
@mooyo 似乎有 1000 封的免费额度 可以自己看看具体的价目
SenLief 17
SenLief 183 天前 via Android
自建邮局不值得,因为都会被编辑为垃圾。如果量少就用免费的,比如 mailgun 。
hanguokai 18
hanguokai 183 天前
为了防止发垃圾邮件(以及影响 IP 声誉),很多云平台都封了 25 端口,比如 Google Cloud 在文档中就明确说了这个问题 https://cloud.google.com/compute/docs/tutorials/sending-mail 。所以不能在虚拟机上用 SMTP 发邮件。一般是使用非 SMTP 的 REST API 接口发邮件。有 mailgun 这些独立的 email api 服务提供商,另外很多云平台(比如 AWS 、阿里云)本身也提供 email api 服务,腾讯云其实也有这个服务 https://cloud.tencent.com/product/ses 。
CFM880 19
CFM880 183 天前
apt install libnss3-tools
mkdir .certs
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > .certs/qq.crt
certutil -A -n “GeoTrust SSL CA” -t “C,,” -d .certs -i .certs/qq.crt
certutil -A -n “GeoTrust Global CA” -t “C,,” -d .certs -i .certs/qq.crt
certutil -L -d .certs

cd .certs
certutil -A -n “GeoTrust SSL CA – G3” -t “Pu,Pu,Pu” -d ./ -i qq.crt

编辑配置信息 /etc/s-nail.rc
set from=xxxxxxxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxxx@qq.com
# 这个去开启 QQ 邮箱的 POP3 会有一串码
set smtp-auth-password=xxxxxxxx
set smtp-auth=login
set ssl-verify=ignore
# 上面生成的 cert.sh 文件路径
set nss-config-dir=/root/crontab/.certs

发送邮件
mailx -s “xx 主题” xxxx@gmail.com xxxx@163.com xxxx1@163.com < message.txt

这样应该是 OK,开放 465 端口后,我们用阿里云是可以发送邮件的
Tink 20
Tink 183 天前
25 端口必须打开才能用 smtp 发吧
BAOryoo 21
BAOryoo 183 天前
@natashahollyz 现在海外服务器都是有活动 也很优惠的 海外服务器不需要备案 可以加我 v ; MTc2MjAzODQ2Mjk=
qzy168 22
qzy168 183 天前
@natashahollyz 也有的。可以联系 V (base64):am9veXVuY29t
leffz 23
leffz 183 天前
腾讯云邮件推送操作步骤: https://curl.qcloud.com/JCAHEoK8
Mashirobest 24
Mashirobest 182 天前 via Android
@Tink 好像选 ssl 可以换成 994 之类的端口(不同的邮箱可能不同)

iOS开发之Swift教程01-Swift基础

【主要内容】

1.关于Swift

2.Hello World

3.常量和变量

4.类型标注

5.常量和变量的命名

6. 输出常量和变量
7.注释

8.分号

一、关于Swift

苹果在2014年WWDC(苹果开发者大会)发布了Swift,用于编写iOS,Mac OS X和watchOS应用程序。Swift 采用安全的编程模式并添加了很多新特性,而且对于熟悉OC人开发者来说学习Swift也很简单。是不是已经迫不及待要体验Swift了。

二、Hello World

在学习计算机每一门语言的时候*个程序肯定都是Hello World,Swift也一样,下边来看一下Swift如何打印Hello World。print(“Hello World”)
就是这么简单不需要多余的字符或者导入一个库。重要的事情说三遍:在Swift中不需要在每句的结尾加分号!在Swift中不需要在每句的结尾加分号!在Swift中不需要在每句的结尾加分号!

三、常量和变量

常量和变量应该是每一门语言里边都存在的。常量就是在定义之后就不可以再改变的量,而变量就是定义之后还可以改变他的值。那么在Swift中使用let来声明常量,使用var来声明变量。注意常量和变量必须在使用前声明。

下边用常量定义你的身高,用变量定义你的年龄:

//定义常量用let 用常量定义身高
let height = 187

//定义变量用var 变量定义年龄
var age = 35
age = 36
上边声明一个你的身高的常量height,并给它初值187,因为人的身高到一定年龄后是不会再变的。有声明一个你的年龄的变量age,赋初值35,因为年龄每年是可以变化的,今年35岁明年就36岁。
你也可以同时定义多个常量或者变量,只需要用逗号隔开:

//同时定义多个常量和变量
let a = 10, b = 27, c = 58
var d = 3.14, e = 6.28, f = 5.28

注意:

在Swift中如果你声明变量而没有重新改变变量的值,那么编译器会警告你:你的变量XXX永远不会改变,建议你使用let声明成常量,如图:

%title插图%num

四、类型标注

当你声明变量或者常量的时候可以加上类型标注(type annotation),说明变量或者常量中要储存的值的类型。格式如下:

//类型标注格式:
//变量/常量 变量名/常量名:类型 = 初始值
let number: Int = 1250
var name: String = “Aventador”
name = “Ferrari”
跟普通定义不同的是,带有类型标注的声明需要在变量名/常量名后边加上一个冒号,冒号后边是类型说明。
用类型标注同样可以同时定义多个变量:

//类型标注同时定义多个变量
var carName,carBrand,carHeight: String
注意:
在Swift中一般很少去写类型标注,因为Swift是一门安全的语言,他有类型安全和类型推断,这个会在后边提到。如果初始化声明的时候没有标注类型,系统会自动推断出变量的类型。

五、常量和变量的命名规则

5.1 你可以用任何的Unicode字符命名

5.2 不能包含数学符号、箭头、保留的(或者非法的)Unicode码位

5.3 不能用连线和制表符

5.4 不能以数字开头,但是可以再名字其他地方出现

5.5 不能重复声明变量名、常量名

你可以像下边这样命名:

%title插图%num

六、输出常量、变量

在Swift中可以用  print(items : Any)函数来输出当前常量或者变量的值:

%title插图%num

Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。

将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:

print(“我的*车是\(_car)”)

七、注释

Swift中注释跟OC基本一样,但是Swift要比OC功能更强。可以使用多行注释嵌套,在OC中是不可以的,如图:

%title插图%num

八、分号

大部分编程语言在每条语句结尾的地方都需要加上分号表示结束。但是在Swift中不强制大家必须写分号,不写没有任何问题,但是写了也不错。

但是有一种情况必须写分号,就是想要在一行中执行多条语句的时候,如图:

%title插图%num

 

四平方和

四平方和 (Python 实现)

题目:

四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多4个正整数的平方和。
如果把0包括进去,就正好可以表示为4个数的平方和。
5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2
对于一个给定的正整数,可能存在多种平方和的表示法。
要求你对4个数排序:
0 <= a <= b <= c <= d
并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,*后输出*个表示法
程序输入为一个正整数N (N<5000000)
要求输出4个非负整数,按从小到大排序,中间用空格分开
例如,输入:
5
则程序应该输出:
0 0 1 2
再例如,输入:
12
则程序应该输出:
0 2 2 2
再例如,输入:
773535
则程序应该输出:
1 1 267 838

代码:

n=int(input())
x=int((n*0.5)//1)
for a in range(x+1):
for b in range(x+1):
for c in range(x+1):
for d in range(x+1):
if n==a**2+b**2+c**2+d**2:
print(a,b,c,d)
exit()

结果:

%title插图%num

Python脚本控制鼠标键盘

Python脚本控制鼠标键盘

import time
import pyautogui as pg
from PIL import Image
import random
import datetime
import threading
import os
import keyboard as kb

AutoPalyFlag = True

# 设置 图标 box
box_settings = (1890, 870, 1920, 900)
# 发起投降 按钮 box
box_surrender = (700, 820, 840, 860)
# 确认投降 按钮 box
box_confirm = (720, 460, 940, 520)
# 空白区域
box_empty_area = (700, 0, 800, 10)
# 再玩一次
box_play_again = (530, 830, 780, 880)

# 商店5个怪的box
champ_box = [
(480, 930, 670, 1070),
(680, 930, 870, 1070),
(880, 930, 1070, 1070),
(1080, 930, 1270, 1070),
(1290, 930, 1480, 1070),
]
pg.FAILSAFE = False
log_path = ‘log\\%s.log’%time.strftime(‘%Y_%m_%d_%H_%M_%S’)
log_file = open(log_path, ‘w’, encoding=’utf8′)

def slow_click(p, button=’PRIMARY’, move_time = 0.2, down_time = 0.2, up_time = 0.2):
pg.moveTo(p[0], p[1], duration=move_time)
pg.mouseDown(p[0], p[1], button=button, duration = down_time)
pg.mouseUp(p[0], p[1], button=button, duration = up_time)

return True

def slow_key_press(key, down_time = 0.2):
kb.press(key)
time.sleep(down_time)
kb.release(key)

return True

def record_and_print_log(log):
global log_file
print(log)
log_file.write(log)
log_file.write(‘\n’)
return True

def get_time_fmt_str(t = None):
if not t:
t = time.localtime()
return time.strftime(“%Y/%m/%d %H:%M:%S”, t)

def stray():
# 在棋盘小范围内随机游荡,防止鼠标指针挡住关卡图片导致检测不到3-2关卡
x = random.randint(500, 1200)
y = random.randint(250, 650)

slow_click((x,y), button=’right’, move_time=0.5)

return True

# 买一个怪
def buy_single_champ(index):
global champ_box

if index > 4:
index = 4
if index < 0:
index = 0

box = champ_box[index]
center = get_box_center(box)
slow_click(center, move_time=0.3)

return True

# 刷新商店
def refresh_shop():
kb.press_and_release(‘d’)
return True

def show_emoji():
kb.press_and_release(‘t’)
return True

# 提升等级
def upgrade_champ():
kb.press_and_release(‘f’)
return True

def get_lol_hwnd():
title = ‘League of Legends’
w = pg.getWindowsWithTitle(title)

hwnd = False
for i in w:
if i.title == title:
hwnd = i
break

return hwnd

def get_box_center(box):
x = int((box[2] – box[0]) / 2) + box[0]
y = int((box[3] – box[1]) / 2) + box[1]

return (x, y)

def move_to_empty_area(lol_hwnd):
global box_empty_area

# 客户端已经*小化,不移动鼠标
if lol_hwnd.size < (1024, 768):
return

center = convert_lol_to_destop_point(get_box_center(box_empty_area), lol_hwnd)
pg.moveTo(center[0], center[1], duration = 0.1)

return True

# 将LOL客户端相对坐标根据LOL客户端位置转换为实际桌面的*对坐标
def convert_lol_to_destop_point(p, lol_hwnd):
x = lol_hwnd.topleft[0] + p[0]
y = lol_hwnd.topleft[1] + p[1]

return (x, y)

def surrender():
global box_settings, box_surrender, box_confirm
# center = get_box_center(box_settings)
# 点击设置
# slow_click(center, move_time=0.5)

slow_key_press(‘esc’)

center = get_box_center(box_surrender)
# 发起投降
slow_click(center, move_time=0.5)

center = get_box_center(box_confirm)
# 确定离开
slow_click(center, move_time=0.5)

return True

# 卖掉候选台前三个怪,和棋盘上自动上的怪
def sell_monsters():
slot1 = (443, 758)
slot2 = (576, 758)
slot3 = (696, 758)
slot4 = (975, 672)

pg.moveTo(slot1)
slow_key_press(‘e’)
time.sleep(1)
pg.moveTo(slot2)
slow_key_press(‘e’)
time.sleep(1)
pg.moveTo(slot3)
slow_key_press(‘e’)
time.sleep(1)
pg.moveTo(slot4)
slow_key_press(‘e’)

game_inactive_count = 0
# 切换到游戏
def make_game_active(game_hwnd):
global game_inactive_count

while not game_hwnd.isActive:
game_hwnd.activate()
pg.press(‘enter’)
time.sleep(2)
game_inactive_count = 0

# 让游戏处于活动状态
def check_game_active(game_hwnd):
global game_inactive_count
if not game_hwnd.isActive:
game_inactive_count += 1
else :
game_inactive_count = 0
# 等待3 * 5秒,游戏还未切换回来,就主动切换回来
if game_inactive_count > 3:
make_game_active(game_hwnd)

# 开始匹配
def click_find_match(lol_hwnd):
pic_find_match = Image.open(r’scs\find_match.jpg’)
p = pg.locateCenterOnScreen(pic_find_match, confidence=0.9)

if p:
slow_click(p)
move_to_empty_area(lol_hwnd)
else:
return False

if not pg.locateCenterOnScreen(pic_find_match, confidence=0.9):
return True

return False

# 等待太久,重新匹配
def stop_and_start_a_new_match(lol_hwnd):
pic = Image.open(r’scs\stop.png’)
p = pg.locateCenterOnScreen(pic, confidence=0.9)
if p:
slow_click(p)
move_to_empty_area(lol_hwnd)
else:
record_and_print_log(‘找不到停止按钮!’)
return False

time.sleep(1)
return click_find_match(lol_hwnd)

# 等待并接受对局
def accept_match(lol_hwnd):
# 5分钟未进入游戏,直接重新匹配
timeout = 5 * 60
start_time = time.time()

pic_accept = Image.open(r’scs\accept.jpg’)
while time.time() – start_time < timeout * 10:
while time.time() – start_time < timeout:
p = pg.locateCenterOnScreen(pic_accept, confidence = 0.93)
if p:
slow_click(p)
move_to_empty_area(lol_hwnd)
# 客户端已*小化,正在启动游戏
if lol_hwnd.size < (1024, 768):
return True
time.sleep(1)
# 等待太久,重新匹配
if not stop_and_start_a_new_match(lol_hwnd):
return False

record_and_print_log(“10次超时未找到对局!”)
return False

# 寻找对局 -> 队列中 -> 接受 -> 开始加载
# 寻找对局 -> 队列中 -> 接受 -> 有人拒* -> 队列中
def pg_find_match(lol_hwnd):
click_find_match(lol_hwnd)
return accept_match(lol_hwnd)

def pg_wait_loading(lol_hwnd):
pic = Image.open(r’scs\1_1.jpg’)

while True:
# pyautogui 模块检测关卡
box = pg.locateOnScreen(pic, confidence=0.9)
if box:
return True
time.sleep(2)
return True

WaitStageFlag = True

def change_wait_flag_callback():
global WaitStageFlag
record_and_print_log(“17分钟未检测到3-2回合,直接进行下一步操作”)
WaitStageFlag = False
return True

# 空城速八
def pg_quick_wait_quit():
global game_inactive_count

print(“Start wait quit button”)
pic = Image.open(r’scs\quit.png’)

client_title = ‘League of Legends (TM) Client’
game_hwnd = pg.getWindowsWithTitle(client_title)[0]

while True:
# 让游戏处于活动状态
check_game_active(game_hwnd)
# 游戏被切换出去了,此时不操作鼠标键盘
if game_inactive_count > 0:
time.sleep(5)
continue

box = pg.locateOnScreen(pic, confidence=0.95)
if box:
slow_click(pg.center(box))
break
case = random.randint(1,100)
# %50 概率游荡
if case <= 50:
stray()
case = random.randint(1,100)
# %50 概率发表情
if case <= 50:
show_emoji()

# case = random.randint(1,100)
# # %5 概率升级
# if case >= 85 and case < 90:
# upgrade_champ()

sell_monsters()

return True

# 乱拿等死
def pg_slow_wait_quit():
global game_inactive_count

print(“Start wait quit button”)
pic = Image.open(r’scs\quit.png’)

client_title = ‘League of Legends (TM) Client’
game_hwnd = pg.getWindowsWithTitle(client_title)[0]

while True:
# 让游戏处于活动状态
check_game_active(game_hwnd)
# 游戏被切换出去了,此时不操作鼠标键盘
if game_inactive_count > 0:
time.sleep(5)
continue

box = pg.locateOnScreen(pic, confidence=0.95)
if box:
slow_click(pg.center(box))
break

if game_inactive_count > 0:
time.sleep(5)
continue

case = random.randint(1,100)
# %40 概率游荡
if case <= 40:
stray()

if game_inactive_count > 0:
time.sleep(5)
continue
case = random.randint(1,100)
# %25 概率买1个英雄
if case >= 25 and case < 50:
buy_single_champ(random.randint(0, 4))

# case = random.randint(1,100)
# %0 概率刷新商店
# if case == 0:
# refresh_shop()

if game_inactive_count > 0:
time.sleep(5)
continue
case = random.randint(1,100)
# %30 概率发表情
if case <= 30:
show_emoji()

if game_inactive_count > 0:
time.sleep(5)
continue

case = random.randint(1,100)
# %5 概率升级
if case >= 85 and case < 90:
upgrade_champ()

time.sleep(1)

return True

# 速度投降
def pg_wait_stage_3_2():
global WaitStageFlag, game_inactive_count
pic = Image.open(r’scs\3_2.jpg’)

WaitStageFlag = True

# 启动一个Timer,17分钟未检测到3-2回合,直接进行下一步
t = threading.Timer(17 * 60, change_wait_flag_callback)
t.start()

client_title = ‘League of Legends (TM) Client’
game_hwnd = pg.getWindowsWithTitle(client_title)[0]

while WaitStageFlag:
# 让游戏处于活动状态
check_game_active(game_hwnd)
# 游戏被切换出去了,此时不操作鼠标键盘
if game_inactive_count > 0:
time.sleep(5)
continue
# pyautogui 模块检测关卡
box = pg.locateOnScreen(pic, confidence=0.9)
if box:
# 检测到3-2,停止Timer
t.cancel()
return True

if game_inactive_count > 0:
time.sleep(5)
continue

case = random.randint(1,100)
# %40 概率游荡
if case <= 40:
stray()

if game_inactive_count > 0:
time.sleep(5)
continue
case = random.randint(1,100)
# %25 概率买1个英雄
if case >= 25 and case < 50:
buy_single_champ(random.randint(0, 4))

# case = random.randint(1,100)
# %0 概率刷新商店
# if case == 0:
# refresh_shop()

if game_inactive_count > 0:
time.sleep(5)
continue
case = random.randint(1,100)
# %30 概率发表情
if case <= 30:
show_emoji()

if game_inactive_count > 0:
time.sleep(5)
continue

case = random.randint(1,100)
# %5 概率升级
if case >= 85 and case < 90:
upgrade_champ()

time.sleep(1)

return True

def close_award_interface(lol_hwnd):
ok_box = (lol_hwnd.centerx – 100, lol_hwnd.bottom – 60, 200, 40)
c = pg.center(ok_box)
slow_click(c)
move_to_empty_area(lol_hwnd)

return True

def pg_wait_surrender_finish(lol_hwnd):
client_title = ‘League of Legends (TM) Client’
times = 0
while True:
time.sleep(1)
times += 1
if pg.getWindowsWithTitle(client_title) == []:
break

if times % 10 == 0:
print(“pg_wait_surrender_finish %d sec, still wait client over!”%times)

# 检测结算界面是否打开
while True:
pic = Image.open(r’scs\end.jpg’)
box = pg.locateOnScreen(pic, confidence = 0.9)
if box:
break

record_and_print_log(“Not Found end.jpg!”)
# 结算界面已打开,但被*励界面遮挡
if lol_hwnd.size == (1600, 900):
record_and_print_log(“try to close_award_interface!”)
close_award_interface(lol_hwnd)

time.sleep(3)

return True

def pg_play_again(lol_hwnd):
global box_play_again, box_empty_area
center = convert_lol_to_destop_point(get_box_center(box_play_again), lol_hwnd)
pg.click(center[0], center[1], duration = 0.3) # 点击再玩一次
move_to_empty_area(lol_hwnd)

time.sleep(1)
pic = Image.open(r’scs\end.jpg’)

pic_find_match = Image.open(r’scs\find_match.jpg’)
box = pg.locateOnScreen(pic_find_match, confidence=0.9)
while not box:
if pg.locateOnScreen(pic, confidence = 0.9) != []:
pg.click(center[0], center[1], duration = 0.3) # 点击再玩一次
move_to_empty_area(lol_hwnd)
else:
# *励界面遮挡
close_award_interface(lol_hwnd)

time.sleep(1)
box = pg.locateOnScreen(pic_find_match, confidence=0.9)

return True

def pg_stop_play():
global AutoPalyFlag
AutoPalyFlag = False
return True

# 手动结束脚本命令,按Ctrl+Alt+q即可设置停止运行标志
kb.add_hotkey(‘ctrl+alt+q’, pg_stop_play)

def pg_main():
global AutoPalyFlag, log_file

w = get_lol_hwnd()
if not w:
print(“游戏未启动,请启动游戏后再运行脚本!”)
return False

play_times = 0
start_time = time.localtime()
game_time_list = []

# record_and_print_log(“[%s] pg_find_match”%get_time_fmt_str())
# pg_find_match(w)
# record_and_print_log(“[%s] pg_wait_loading”%get_time_fmt_str())
# pg_wait_loading(w)
# record_and_print_log(“[%s] pg_quick_wait_quit”%get_time_fmt_str())
# pg_quick_wait_quit()
# record_and_print_log(“[%s] pg_wait_surrender_finish”%get_time_fmt_str())
# pg_wait_surrender_finish(w)
# play_times += 1
# record_and_print_log(“[%s] pg_play_again”%get_time_fmt_str())
# pg_play_again(w)

while AutoPalyFlag:
# 游戏开始时间
game_start = time.time()
record_and_print_log(“[%s] pg_find_match”%get_time_fmt_str())
pg_find_match(w)
record_and_print_log(“[%s] pg_wait_loading”%get_time_fmt_str())
pg_wait_loading(w)

case = random.randint(1, 3)
# case = 1
if case == 1:
record_and_print_log(“[%s] pg_wait_stage_3_2″%get_time_fmt_str())
pg_wait_stage_3_2()
record_and_print_log(“[%s] surrender”%get_time_fmt_str())
surrender()
record_and_print_log(“[%s] pg_wait_surrender_finish”%get_time_fmt_str())
elif case == 2:
record_and_print_log(“[%s] pg_quick_wait_quit”%get_time_fmt_str())
pg_quick_wait_quit()
elif case == 3:
record_and_print_log(“[%s] pg_slow_wait_quit”%get_time_fmt_str())
pg_slow_wait_quit()
pg_wait_surrender_finish(w)
play_times += 1
record_and_print_log(“[%s] pg_play_again”%get_time_fmt_str())

# 游戏结束时间
game_end = time.time()
game_time = int(game_end – game_start)
game_time_list.append(game_time)

if not AutoPalyFlag:
break
pg_play_again(w)

# 统计每局时间,写入到文件
for i in range(len(game_time_list)):
seconds = game_time_list[i] % 60
minutes = int(game_time_list[i] / 60)
info = “第%d局用时[%d]分[%d]秒”%(i + 1, minutes, seconds)
record_and_print_log(info)

# 输出统计信息
end_time = time.localtime()

record_and_print_log(“[%s] 开始挂机”%get_time_fmt_str(start_time))
record_and_print_log(“[%s] 结束挂机”%get_time_fmt_str(end_time))

diff_time_sec = time.mktime(end_time) – time.mktime(start_time)
t_s = int(diff_time_sec) % 60
diff_time_sec /= 60
# 总共所用分钟数
total_minutes = diff_time_sec
t_m = int(diff_time_sec) % 60
diff_time_sec /= 60
t_h = int(diff_time_sec)

average_minutes = total_minutes / play_times
t_ave_m = int(average_minutes)
t_ave_s = int((average_minutes – t_ave_m) * 60)
record_and_print_log(“共挂机[%d]小时[%d]分钟[%d]秒,挂机[%d]局,平均[%d]分钟[%d]秒一局”%(t_h, t_m, t_s, play_times, t_ave_m, t_ave_s))

log_file.close()

return True

if __name__ == ‘__main__’:
pg_main()
os.system(“pause”)
测试程序:win10下打包好的*新程序和截图资源文件:某度网盘  提取码:lek7

不懂就问,如何高效地存储服务日志?

naoh1000 · 179 天前 via iPhone · 2936 次点击
这是一个创建于 179 天前的主题,其中的信息可能已经有所发展或是发生改变。
前端在写自己项目的时候想到的一个问题。偶尔在后台中分析和查看的日志保存在文件中还是数据库中效率更高?查了一些资料看起来是数据库效率更高,那为什么大部分开源项目使用的都是文件存储日志?
日志 数据库 存储 文件18 条回复 • 2020-10-15 15:57:06 +08:00
zvcs 1
zvcs 179 天前 via iPhone
一般都有集中的日志中心。大佬们都推荐 ELK 。
wangyanrui 2
wangyanrui 179 天前 via Android
*个问题,一般文件更高,因为数据库牵扯到事务,会多一层逻辑,所以数据库效率不高

第二个问题,因为小项目日志怎么搞无所谓,大项目必须要 高性能,高搜索支持度,结构一致,以及便捷的支持后续的数据分析
xiaochun41 3
xiaochun41 179 天前
楼上说的都没问题,一般还是具体问题具体对待,如果是小规模的项目,就用*简单,*方便的方式就对了。
综合来看,大部分项目使用的是本地写文件的方式,定期会归档,清理。
如果涉及较多的机器,一般也会集中将每台机器上的日志收集起来。
linxiaojialin 4
linxiaojialin 179 天前
@wangyanrui 感觉和你理解的有点不一样,*个问题,“存”日志时不会启用事务(可以用 MyISAM ),所以存的效率也不低,而“查”日志时数据库效率比较高,特别是一个日志文件有几十上百 G 时,区别更明显的,文件打开时非常慢,更别说筛选查看。

第二问题,跟你的观点一致,额外补充:①数据库比较占内存,而文件只是占磁盘;②一般应用日志跟业务无关,应独立出来,避免占用“业务数据库”资源。

@naoh1000 所以开源项目“默认使用”文件存储日志,可能是考虑项目初期(小项目)服务器的资源问题。等项目大了,可以把日志的存储配置改成数据库,单独搞一个的“日志数据库”,或者上 ES 、ELK 等等。
Gathaly 5
Gathaly 179 天前
数据量不大的,直接存到数据库,有钱又有价值的上 es
我们公司就是存数据库的,而且大多数都是如此做
peckey 6
peckey 179 天前
看项目规模,小型项目节点很少,通过日志组件直接记录文件就好了,偶尔排查个问题啥的
如果项目较大,节点较多,日志分散在文件中,定位问题需要查找多个文件相对较为麻烦,另外如果还有分析,告警之类的需求,则 ELK 这类的技术栈更为合适
wangfyyy 7
wangfyyy 179 天前
kafka -> mysql -> es 目前是这样
rrfeng 8
rrfeng 179 天前
ELK 里 E 纯粹是浪费性能,因为大多数日志不需要结构化解析。
所以现在推荐 Grafana 出的 Loki
chendy 9
chendy 179 天前
日志打进文件简单稳定,给个文件就能打,用户想落库自己捞就好
开源项目日志直接落库的话,要考虑各种数据库各种环境,虽然有日志工具但是还是太复杂
saytesnake 10
saytesnake 179 天前
对 Elasticsearch 一言难尽,还是 Loki 舒适简单。

mokeyjay 11
mokeyjay 179 天前
@linxiaojialin #4 嗨呀,好久不见
说起来头头是道的,厉害呀,没少进步
哪像我还在文件+脚本定期清理
Navee 12
Navee 179 天前
需要分析和查询的话还是 ELK 简单
日志量不大的情况下比数据库还是舒服的,量大的话就如上面所说一言难尽,除非你非常有钱
gabon 13
gabon 179 天前 via Android
*近我司在转 clickhouse
opengps 14
opengps 179 天前 via Android
建议集中到第三方存储,毕竟现在各种分布式架构,本地存储方案只适应用单机项目了
wangyanrui 15
wangyanrui 179 天前 via Android
@linxiaojialin

文件顺序写 IO 即可,数据库即使不算事务,也有数据库自己的处理逻辑,总归是慢一点的

另外,日志没有不切分的,按规则切分,配合 grep,awk 之类的,比数据库方便多了
例如,查询包含 error 字符串的日志,数据库就很麻烦
laminux29 16
laminux29 178 天前
你这个问题基本上涵盖了计算机本科的大部分知识,要讲明白,相当于得为你写好几本科目的教材。

如果你真想学明白,可以去搜搜国内 TOP5 计算机本科或软件本科的科目,然后去找相关教材学习。

如果只是想随便了解下,一楼兄弟给的方案就不错,或者自己把几种方案都尝试一下也行。只是,一旦遇到问题,或者结论与你设想的不一样,没有足够的知识,你是没办法查明问题的根源所在。
linxiaojialin 17
linxiaojialin 178 天前
@mokeyjay 然而我只是班门弄斧?现在你才是大佬啊,有时间带带我?救救孩子吧
whx20202 18
whx20202 176 天前
推荐阿里云的 SLS 服务

如何高效地冷存储大量图片?

1 naoh1000 · 166 天前 · 7259 次点击
这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。
我们公司的 app 活跃用户大约有 800 万。*近产品经理要求做一个实名认证功能,要求上传身份证照片,审核完后基本没人看了,请问这些数据应该存数据库里还是作为文件单独存储?如果存数据库会不会导致数据库很大,大量小图片作为文件存储会不会不方便备份?虽然这不是我一个前端该管的事,但我正在打算转后端,想了解一下大佬们是怎么解决这问题的。

数据库 存储 文件 图片75 条回复 • 2020-10-28 08:06:32 +08:00
fxXkcCpEveryday 1
fxXkcCpEveryday 166 天前 via iPhone
使用對象存儲
opengps 2
opengps 166 天前 via Android
对象存储有冷存储的方案,比实时读写要便宜,每次取用得先解冻
tanghongkai 3
tanghongkai 166 天前 ❤️ 36
身份证照片为啥要存,实名完等着卖黑产吗?
opengps 4
opengps 166 天前 via Android ❤️ 2
@tanghongkai 任何一家服务商都会存的,不然出问题连线索都提供不了,冷存储是比较安全的做法,不像某些站点的做法(可遍历爬取)
wangyzj 5
wangyzj 166 天前 ❤️ 4
实名认证用专门的服务商不就行了,不用上传身份证
wunonglin 6
wunonglin 166 天前
oss 归档储存
qwerthhusn 7
qwerthhusn 166 天前
存到 OBS,建议单独建一个 Bucket,然后这个 Bucket 严格控制读写权限
JensenQian 8
JensenQian 166 天前 ❤️ 1
实名认证要不直接走支付宝的,我只是提供一个建议 https://opendocs.alipay.com/mini/introduce/alipay-verfify
Mitt 9
Mitt 166 天前 ❤️ 2
通常就是接入云服务商的存储系统,比如对象存储,自建的话就是单独的一套存储系统比如 TFS 、GFS (当然只是举个例子,实际还是要各方面考量),至于备份等等这些事情其实就属于运维管辖了,也都是有冷热备份方案的,然后合理性上的话,实名认证功能是不会自己做的,人工审核成本大,还要考虑伪造身份证等因素,所以*好的方法就是接入第三方认证机构,比如支付宝、微信或者其他支持活体认证的第三方,有个好处就是有他们的实名技术背书,即便要求调档也只需要提供该用户的真实姓名、身份证号就足够了,如果企业自己运作实名审核的话就要考虑万一出现安全事故,大量身份证照片泄露的后果是非常严重的(当然这就不是一个开发的考虑范畴了)。
ericbize 10
ericbize 166 天前 via iPhone
云的 oss, 冷数据不贵

swulling 11
swulling 166 天前 via iPhone ❤️ 1
@opengps 保留身份证号和姓名就已经足够了,保存身份证图片有什么意义?

实名的意义不就是出事了把身份证号给 jc 么
Jerami 12
Jerami 166 天前 via Android ❤️ 11
好小子实名认证说干就干,我都以为是连到公安局的网络*验证,自己没有资格审核用户的数据,没想到居然如此随便!
loliordie 13
loliordie 166 天前 via Android
没人吐槽 800 万用户就算全部上传也就 8 个 T 的数据么 这个数据量实在没啥好说的 选个便宜的存储丢着就行了
loliordie 14
loliordie 166 天前 via Android ❤️ 3
@Mitt 同意 如果在国外擅自保存用户证件信息怕是不知道死字怎么写
threeEggs123 15
threeEggs123 166 天前 via Android
aws s3 glacier 完美解决
nooper 16
nooper 166 天前 ❤️ 5
这种数据泄露,或者被交易,你们是哪家公司?我对避免用你们的 app
ruri 17
ruri 166 天前 via Android ❤️ 1
活跃 800w ?想知道是哪个公司,我避个雷?
wccc 18
wccc 166 天前 via iPhone
离职后给个提示
omL72EEc 19
omL72EEc 166 天前
可以随便存的么?也太恐怖了,怪不得搞身份这么便宜
lpts007 20
lpts007 166 天前 via Android ❤️ 5
https://www.v2ex.com/t/712465

用户也是倒了血霉了。
lpts007 21
lpts007 166 天前 via Android
不过也理解,都是打工人。
OldActorsSmile 22
OldActorsSmile 166 天前
调用百度网盘 api,存储到百度网盘,免费。我的图床( https://imgbed.cn )连续 1 年没人访问的也会冷存储
naoh1000 23
naoh1000 166 天前
@tanghongkai
@wangyzj
@nooper
@ruri 我工作过的几家还算大的公司都是随便存的…

@lpts007 麻烦读一下题目,这块不归我管,只是想让大家分享一下好的方法。
yrj 24
yrj 166 天前 via iPad
人家 800 万活跃用户,各位大佬就不要推荐网盘之类的奇淫技巧了,直接 oss 归档存储,记得加密。
laike9m 25
laike9m 166 天前 via Android ❤️ 17
所以说尽可能避免国产 app,这话*对不错
Perry 26
Perry 166 天前 via iPhone ❤️ 3
做这种东西在国外可以被告到破产
raaaaaar 27
raaaaaar 166 天前 via Android
活跃用户好像要去重来着,一个产品这么多用户吗?
yqm1024 28
yqm1024 166 天前
实名吗?文件存储有点那个了吧
kimi0 29
kimi0 166 天前 via iPhone
如上所说,这种东西根本就不该存。
delectate 30
delectate 166 天前 ❤️ 2
都是打工人,何必为难楼主?骂也要骂这个奇葩的时代。

阿里云 oss 或者腾讯云的低频数据存储就行了。
huihuilang 31
huihuilang 166 天前 via Android
哪个公司的?这种存身份证的辣鸡公司准备举报一波
katana97 32
katana97 166 天前
酷安也是这样,开发者手持身份证的图片认证完了不删也就算了,还直接在开发者后台里展示出来,前几天偶然看到吓的我把开发者认证都取消了
YLGG 33
YLGG 166 天前
为何这种收集用户隐私的行为在我天朝这么肆无忌惮呢?
Jerami 34
Jerami 166 天前 via Android
@YLGG 因为我们的法律落后于当前科技,更何况中国文化自古以来人与人之间距离不是特别明显,也不特别看重隐私,所以推广实名制人脸识别几乎没有遭到反对,相反,你要是重视还会被说中国哪有什么隐私,什么身正不怕影子斜你有问题?甚至被扣上崇洋媚外的帽子。
fengchang 35
fengchang 166 天前
为什么提供线索要身份证照片,因为警察拿身份证号查不到?
sunmoon1983 36
sunmoon1983 166 天前
@OldActorsSmile 百度网盘有 api 吗?
linvaux 37
linvaux 166 天前 via iPhone
麻烦说一下是哪个 app,我好避雷?,存身份证照片,怕是别有用心
OldActorsSmile 38
OldActorsSmile 166 天前
@sunmoon1983

pan.baidu.com/union/document/upload#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
polymerdg 39
polymerdg 166 天前
实名认证不是 连 API 验证吗 为啥还好保留 身份证
黑产?
sogwsc 40
sogwsc 166 天前
@Jerami 不重视隐私 却重视实名 现在是个平台都要绑手机+实名认证 真是奇葩
qinyusen 41
qinyusen 166 天前
序列化之后对象存储, 有点儿像标注数据的原始数据或者是脏数据,随便儿用个 HDFS,然后进行块备份就好。
因为搬运和存储是整块数据,copy 起来速度快, 然后直接切片存到冷备份对应机架,然后对应机架只能特定 IP 和端口访问,冷备份就是 copy 完,拔硬盘就完了,当做热备份也行,做好数仓和后端的割裂就行了,我一般做法很土,就是对后端只有写接口,没有读和删改接口。改请人工到另一个内网位置提交修改就好,然后人工审核后 prove 进去(大规模的,就直接敲黑板找老板说行为非法)。
然后如果需要查询,就直接再后一级做一次脱敏, 身份证后 x 位直接抹掉(简单的 opencv+打码),头像打码, 地址打码,打码程度视脱敏规模。
Kagari 42
Kagari 166 天前 via Android
你们真就相信其他 app 没有存?
Jerami 43
Jerami 166 天前 via Android
@sogwsc 因为不重视隐私所以实名制才能快速推广,没有收到民众抵制(况且也不敢抵制,毕竟都清楚根本目的是什么)
efaun 44
efaun 166 天前
@sogwsc #40 老大哥很注重你的“隐私”的,所以才会实名
huayumo 45
huayumo 166 天前
现在都是走支付宝的实名接口,
EZG997 46
EZG997 166 天前 ❤️ 1
就目前国内互联网行业的状况,实名制不知道到底方便了谁,隐私就是这么泄露的。
Stain5 47
Stain5 166 天前
直接打印出来好像很可行
800w 条信息 一张纸打印 20 条 每分钟打印 200 张
大约 30 个小时就完工了

安全性 
可靠性 
wangyzj 48
wangyzj 166 天前
@naoh1000 #23 一定要存的话就是 oss 这类的对象存储就可以了,本地就是用 ceph 或者 hdfs 之类的把
eason1874 49
eason1874 166 天前 ❤️ 1
先建议产品经理别存储。

如果存储,不用问都知道有一些不可告人的目的。那就要为自己负责,现在有法律法规对个人信息的存储进行规定,也推出了一些标准,建议去了解,免得将来出事了自己也被连累。

从技术操作上说,比较简单粗暴的办法是:每个文件内容都用随机密钥加密存到一个文件名为编号的文本文件,归档存储,然后把编号、原文件属性信息、随机密钥和用户 ID 通过非对称公钥加密,存到数据库。

这样只要执行过程不泄露,就算代码、公钥、数据库字段和文件都泄露了,也解密不了内容,保护好私钥安全就行。
futandrew 50
futandrew 166 天前 via iPhone
@Perry emmm 寻思着国外个人信息不是基本全公开吗?网上类似功能一找一堆,充钱即可解锁基本所有信息
PhpBestRubbish 51
PhpBestRubbish 166 天前 ❤️ 1
实名认证不是用第三方 API 吗?为啥你们要存身份证照片?
PhpBestRubbish 52
PhpBestRubbish 166 天前
@Kagari 我们的 App 就没有存身份证照片
weizhen199 53
weizhen199 166 天前
@futandrew 我咋记得只有前科犯会被公开
mjjfl 54
mjjfl 165 天前
@naoh1000 腾讯云对象存储有归档存储。归档存储提供了*低的存储单价,但读取数据的时候需要较长的解冻时间,因而适合需要长期保存数据的业务场景。可联系我打折,V:am9veXVuY29t
kaopuyunluzh 55
kaopuyunluzh 165 天前
腾讯云新政策 @
1 、累计预付费订单金额大于等于 6600 元且月均预付费订单分摊金额累计大于等于 550 元,可赠送元 5000 代金券
2 、累计预付费订单金额大于等于 38800 元且月均预付费订单分摊金额累计大于等于 3300 元,可赠送 2 万元代金券
futandrew 56
futandrew 165 天前 via iPhone
@weizhen199 国内是这样的,还有失信人员。国外人基本全透明。包括名字,亲属关系,手机号,家庭住址等常见的隐私信息。常见的有 anywho, 411 等。
我记得还有那种直接定位的,就是你输入名字然后直接展示距离你比如 300 公里里面的所有叫这个名字的位置。
简单点的可看影视作品《网络迷踪》了解更多(
shifttacn 57
shifttacn 165 天前
有资质么,就要求实名认证
IDAEngine 58
IDAEngine 165 天前 via iPhone
用磁带存了,几百年都在
idblife 59
idblife 165 天前
s3
imherer 60
imherer 165 天前
s3 +1
easymbol 61
easymbol 165 天前
直接使用第三方的支付认证接口,自己存储风险太高
channg 62
channg 165 天前
@linvaux #37 先说你上传身份中到过哪
isnullstring 63
isnullstring 165 天前
800w 用户 ,就算*终只有 10W 人上传身份证,转手卖出去,也不少钱喔
DoctorCat 64
DoctorCat 165 天前
哎,说个题外话,这种非 PCI-DSS 认证过的服务真的是不敢用了。
正题:国际案例来看亚马逊 AWS S3 是可以的。你们存储要考虑使用符合安全等级的产品和服务商!!! 不然泄漏或者被查技术负责人要抓去爆菊的。
code2019 65
code2019 165 天前
华为云 OBS 对象存储
alect 66
alect 165 天前
请告诉我到底是哪个 APP,我要避免入坑。
reus 67
reus 165 天前 via Android
泄露了要坐牢的!找第三方,别作死
reus 68
reus 165 天前 via Android
https://www.secrss.com/articles/26427 个人信息保护法在起草,估计施行不远。现在不早做准备?
yolee599 69
yolee599 165 天前 via Android
想不到这种敏感信息处理这么随便
madpecker009 70
madpecker009 164 天前
@tanghongkai 来自灵魂的拷问
ryanlid 71
ryanlid 164 天前
我敢打堵一块钱,*大部分要求上传身份证、手持身份证的网站、APP,证件都没有删除

支付宝、微信…的各种申请也没有
anyforever 72
anyforever 164 天前
要求手机号的就忍了,要求实名认证的,还是不用为好
myqoo 73
myqoo 164 天前
加密后存储到免费空间上 – –
Oysmart 74
Oysmart 164 天前
法律多熟读,能使用第三方就使用第三方吧,这叫转移风险,如果出现安全问题,老板估计就得进去喝茶了。
steptodream 75
steptodream 164 天前
所以说一般的 APP 除非不是 100%必须 真的是不要上传证件 所有人和公司都一样 *原则都是方便自己

列表的增、删、查、改

列表的增、删、查、改

列表的增、删、查、改

增加元素
append:在列表尾部追加一个元素
a = [1,2,3,4]
a.append(5)
a.append(‘hello’)
print(a)

extend:在列表尾部追加多个元素

a = [1,2,3,4]
a.extend(‘5’) # 以字符串形式插入
a.extend([6,7]) # 以列表形式
print(a)

insert:在队列中间插入元素,该方法需要传递两个参数,*个参数表示要插入元素的位置,第二个参数表示要插入的元素,此方法一个只能插入一个元素

a = [1,2,3,4]
a.insert(2,5)
print(a)

删除元素
pop:默认删除*后一个元素,但是也可以删除指定位置的元素

a = [1,2,3,4]
a.pop()
print(a)

a = [1,2,3,4]
a.pop(2)
print(a)

remove:指定元素内容对元素进行删除

a = [1,2,3,4]
a.remove(2)
print(a)

del:通过位置删除元素

a = [1,2,3,4]
del a[2]
print(a)

查找元素
index:查找元素在队列中的索引位置

a = [1,2,3,4]
print(“1 index is:”,a.index(1))

其他操作
reverse:反转队列

a = [1,2,3,4]
a.reverse()
print(a)

count:统计某个元素在队列中出现的次数

a = [1,2,3,4]
print(a.count(1))

sort:对列表进行排序

a = [4,3,2,1]
a.sort()
print(a)

使用request下载图片

使用request下载图片

request介绍
Requests建立在世界上下载量*大的Python库urllib3上,它令Web请求变得非常简单,功能强大且用途广泛。
Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。功能非常全面而且使用方便
Requests可以完成您能想到的所有高级工作,例如:

认证
使用cookie
执行POST,PUT,DELETE等
使用自定义证书
使用会话Session
使用代理
request安装
request的安装非常简单,只需要在cmd中输入 pip install requests 进行安装

request的用法很多,这里介绍怎么用request 根据连接同时下载多个图片

具体代码
from urllib import request
from multiprocessing import Process
def aa(uit):
name=uit.split(‘/’)[-1]
pen=request.urlopen(uit)
q=pen.read()
with open(name,’wb’) as f:
f.write(q)
if __name__ == ‘__main__’:
lis=[]
na=[‘进程1′,’进程2′,’进程3’]
aaa=[‘https://img0.baidu.com/it/u=3724865004,3598526800&fm=26&fmt=auto&gp=0.jpg’,’https://img2.baidu.com/it/u=2598714022,2194647539&fm=26&fmt=auto&gp=0.jpg’,’https://img1.baidu.com/it/u=2016159045,522593296&fm=15&fmt=auto&gp=0.jpg’]
for i in range(0,3):
a=Process(target=aa,name=str(i),args=(aaa[i],))
print(f'{a.name}开始运行了’)
a.start()
lis.append(a)
print(lis,)
for a in lis:
a.join()
print(‘主进程id%s’%os.getpid())

首先先要导入,需要用到的是request和设置多进程的Process模块

from urllib import request
from multiprocessing import Process

然后写一个函数,用来处理得到的网址和下载图片

def aa(uit):
name=uit.split(‘/’)[-1]
pen=request.urlopen(uit)
q=pen.read()
with open(name,’wb’) as f:
f.write(q)

首先用split()方法进行分割,用*后一个作为图片的名字
然后体现request的强大之处,用request.urlopen(uit)就可以对目标网址发出get请求,然后收到网站的响应,返回网站给的数据(自动筛选出数据,去掉响应头等只返回相应正文)
使用read()读取返回的数据将他写入文件中

if __name__ == ‘__main__’:
lis=[]
aaa=[‘https://img0.baidu.com/it/u=3724865004,3598526800&fm=26&fmt=auto&gp=0.jpg’,’https://img2.baidu.com/it/u=2598714022,2194647539&fm=26&fmt=auto&gp=0.jpg’,’https://img1.baidu.com/it/u=2016159045,522593296&fm=15&fmt=auto&gp=0.jpg’]
for i in range(0,3):
a=Process(target=aa,name=str(i),args=(aaa[i],))
a.start()
lis.append(a)
for a in lis:
a.join()

程序运行时同时运行3个进程一起下载,然后将所有进程都放到一个空的列表中,然后再逐个进行关闭。
下载完再查看下载的目录看看是否下载完成

但是有一些网站会主动屏蔽掉request这个方法,所以现在基本淘汰了这个方法,不过对一些小网站还是可以使用的

python硬币游戏悖论

python硬币游戏悖论

今天和我俞姐对一个数学概率问题进行讨论,讨论半天没有结果,然后决定用代码仿真实现一下。
题目:连续掷一枚硬币,如果连续的三次结果出现正正反的情况下A赢,出现正反反的结果B赢,请问A赢的概率大还是B赢得概率大。
分析:*感觉都是百分之五十,但试验过就知道结果并不是这样。至于为什么,各位大佬自己去思考吧!
附代码:

import random

Iwin=0
Ywin=0
for n in range(10000):
my_list = []
m = random.randint(0, 1)
my_list.append(m)
x = random.randint(0, 1)
my_list.append(x)
for i in range(10000):
y = random.randint(0, 1)
my_list.append(y)
new_list=my_list[i:i+3]
if new_list==[0,0,1]:
Iwin+=1
break
elif new_list==[0,1,1]:
Ywin+=1
break
print(Iwin)
print(Ywin)

Eclipse 分屏显示同一个代码文件

描述:

今天在使用Eclipse开发的时候不知按错哪个键,出现编辑框分屏显示同一个代码,由于之前没有使用过这一功能,所以就去查了一下,原来是Eclipse的分屏功能。

 

快捷键:

方式一:Window -> Editor -> Toggle Split Editor (Ctrl + _)       or      Toggle Split Editor (Ctrl + {)

方式二:Ctrl + Shift + _        or      Ctrl + Shift + {

%title插图%num

 

截图:

竖着分屏(Ctrl + Shift + {):

%title插图%num

 

 

横着分屏(Ctrl + Shift + _):

%title插图%num

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速