这些方法,能够让你的 Python 程序快如闪电

来源:机器之心

讨厌 Python 的人总是会说,他们不想用 Python 的一个重要原因是 Python 很慢。而事实上,无论使用什么编程语言,特定程序的运行速度很大程度上取决于编写程序的开发人员以及他们优化程序、加快程序运行速度的技能。
那么,让我们证明那些人错了!本文将介绍如何提升 Python 程序的效率,让它们运行飞快!
这些方法,能够让你的 Python 程序快如闪电
计时与性能分析
在开始优化之前,我们首先需要找到代码的哪一部分真正拖慢了整个程序。有时程序性能的瓶颈显而易见,但当你不知道瓶颈在何处时,这里有一些帮助找到性能瓶颈的办法:
注:下列程序用作演示目的,该程序计算 e 的 X 次方(摘自 Python 文档):
# slow_program.py
from decimal import *

def exp(x):
    getcontext().prec += 2
    i, lasts, s, fact, num = 00111
while s != lasts:
        lasts = s
        i += 1
        fact *= i
        num *= x
        s += num / fact
    getcontext().prec -= 2
return +s

exp(Decimal(150))
exp(Decimal(400))
exp(Decimal(3000))
最懒惰的「性能分析」
首先,最简单但说实话也很懒的方法——使用 Unix 的 time 命令:

nbsp;time python3.8 slow_program.py

real    0m11,058s
user    0m11,050s
sys     0m0,008s
如果你只想给整个程序计时,这个命令即可完成目的,但通常是不够的……
最细致的性能分析
另一个极端是 cProfile,它提供了「太多」的信息:

nbsp;python3.8 -m cProfile -s time slow_program.py
1297 function calls (1272 primitive calls) in 11.081 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
3   11.079    3.693   11.079    3.693 slow_program.py:4(exp)
1    0.000    0.000    0.002    0.002 {built-in method _imp.create_dynamic}
4/1    0.000    0.000   11.081   11.081 {built-in method builtins.exec}
6    0.000    0.000    0.000    0.000 {built-in method __new__ of type object at 0x9d12c0}
6    0.000    0.000    0.000    0.000 abc.py:132(__new__)
23    0.000    0.000    0.000    0.000 _weakrefset.py:36(__init__)
245    0.000    0.000    0.000    0.000 {built-in method builtins.getattr}
2    0.000    0.000    0.000    0.000 {built-in method marshal.loads}
10    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:1233(find_spec)
8/4    0.000    0.000    0.000    0.000 abc.py:196(__subclasscheck__)
15    0.000    0.000    0.000    0.000 {built-in method posix.stat}
6    0.000    0.000    0.000    0.000 {built-in method builtins.__build_class__}
1    0.000    0.000    0.000    0.000 __init__.py:357(namedtuple)
48    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:57(_path_join)
48    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap_external>:59(<listcomp>)
1    0.000    0.000   11.081   11.081 slow_program.py:1(<module>)
...
这里,我们结合 cProfile 模块和 time 参数运行测试脚本,使输出行按照内部时间(cumtime)排序。这给我们提供了大量信息,上面你看到的行只是实际输出的 10%。从输出结果我们可以看到 exp 函数是罪魁祸首(惊不惊喜,意不意外),现在我们可以更加专注于计时和性能分析了……
计时专用函数
现在我们知道了需要关注哪里,那么我们可能只想要给运行缓慢的函数计时而不去管代码的其他部分。我们可以使用一个简单的装饰器来做到这点:
def timeit_wrapper(func):
    @wraps(func)
def wrapper(*args, **kwargs):
        start = time.perf_counter()  # Alternatively, you can use time.process_time()
        func_return_val = func(*args, **kwargs)
end = time.perf_counter()
        print('{0:<10}.{1:<8} : {2:<8}'.format(func.__module__, func.__name__end - start))
return func_return_val
return wrapper
接着,将该装饰器按如下方式应用在待测函数上:
@timeit_wrapper
def exp(x):
    ...

print('{0:<10} {1:<8} {2:^8}'.format('module''function''time'))
exp(Decimal(150))
exp(Decimal(400))
exp(Decimal(3000))
得到如下输出:

nbsp;python3.8 slow_program.py
module     function   time
__main__  .exp      : 0.003267502994276583
__main__  .exp      : 0.038535295985639095
__main__  .exp      : 11.728486061969306
此时我们需要考虑想要测量哪一类时间。time 库提供了 time.perf_counter 和 time.process_time 两种时间。其区别在于,perf_counter 返回绝对值,其中包括了 Python 程序并不在运行的时间,因此它可能受到机器负载的影响。而 process_time 只返回用户时间(除去了系统时间),也就是只有进程运行时间。
让程序更快
现在到了真正有趣的部分了,让 Python 程序跑得更快!我不会告诉你一些奇技淫巧或代码段来神奇地解决程序的性能问题,而更多是关于通用的想法和策略。使用这些策略,可以对程序性能产生巨大的影响,有时甚至可以带来高达 30% 的提速。
使用内置的数据类型
这一点非常明显。内置的数据类型非常快,尤其相比于树或链表等自定义类型而言。这主要是因为内置数据类型使用 C 语言实现,使用 Python 实现的代码在运行速度上和它们没法比。
使用 lru_cache 实现缓存/记忆
我在之前的博客中介绍过这一技巧,但我认为它值得用一个简单例子再次进行说明:
import functools
import time

# caching up to 12 different results
@functools.lru_cache(maxsize=12)
def slow_func(x):
    time.sleep(2)  # Simulate long computation
return x

slow_func(1)  # ... waiting for 2 sec before getting result
slow_func(1)  # already cached - result returned instantaneously!

slow_func(3)  # ... waiting for 2 sec before getting result
上面的函数使用 time.sleep 模拟了繁重的计算过程。当我们第一次使用参数 1 调用函数时,它等待了 2 秒钟后返回了结果。当再次调用时,结果已经被缓存起来,所以它跳过了函数体,直接返回结果。
使用局部变量
这和每个作用域中变量的查找速度有关。我之所以说「每个作用域」,是因为这不仅仅关乎局部变量或全局变量。事实上,就连函数中的局部变量、类级别的属性和全局导入函数这三者的查找速度都会有区别。函数中的局部变量最快,类级别属性(如 self.name)慢一些,全局导入函数(如 time.time)最慢。
你可以通过这种看似没有必要的代码组织方式来提高效率:
#  Example #1
class FastClass:

def do_stuff(self):
        temp = self.value  # this speeds up lookup in loop
for i in range(10000):
            ...  # Do something with `temp` here

#  Example #2
import random

def fast_function():
    r = random.random
for i in range(10000):
        print(r())  # calling `r()` here, is faster than global random.random()

使用函数

这也许有些反直觉,因为调用函数会让更多的东西入栈,进而在函数返回时为程序带来负担,但这其实和之前的策略相关。如果你只是把所有代码扔进一个文件而没有把它们放进函数,那么它会因为众多的全局变量而变慢。因此,你可以通过将所有代码封装在 main 函数中并调用它来实现加速,如下所示:
def main():
    ...  # All your previously global code

main()
不要访问属性
另一个可能让程序变慢的东西是用来访问对象属性的点运算符(.)。这个运算符会引起程序使用__getattribute__进行字典查找,进而为程序带来不必要的开销。那么,我们怎么避免(或者限制)使用它呢?
#  Slow:
import re

def slow_func():
for i in range(10000):
        re.findall(regex, line)  # Slow!

#  Fast:
from re import findall

def fast_func():
for i in range(10000):
        findall(regex, line)  # Faster!
当心字符串
当在循环中使用取模运算符(%s)或 .format() 时,字符串操作会变得很慢。有没有更好的选择呢?根据 Raymond Hettinger 近期发布的推文,我们只需要使用 f-string 即可,它可读性更强,代码更加紧凑,并且速度更快!基于这一观点,如下从快到慢列出了你可以使用的一系列方法:
f'{s} {t}'  # Fast!
s + '  ' + t 
' '.join((s, t))
'%s %s' % (s, t) 
'{} {}'.format(s, t)
Template('$s $t').substitute(s=s, t=t)  # Slow!
生成器本质上并不会更快,因为它们的目的是惰性计算,以节省内存而非节省时间。然而,节省的内存会让程序运行更快。为什么呢?如果你有一个大型数据集,并且你没有使用生成器(迭代器),那么数据可能造成 CPU 的 L1 缓存溢出,进而导致访存速度显著变慢。
当涉及到效率时,非常重要的一点是 CPU 会将它正在处理的数据保存得离自己越近越好,也就是保存在缓存中。读者可以看一看 Raymond Hettingers 的演讲(https://www.youtube.com/watch?v=OSGv2VnC0go&t=8m17s),其中提到了这些问题。
总结
优化的第一要义就是「不要去做」。但如果你必须要做,我希望这些小技巧可以帮助到你。然而,优化代码时一定要谨慎,因为该操作可能最终造成代码可读性变差、可维护性变差,这些弊端可能超过代码优化所带来的好处。
参考链接:https://towardsdatascience.com/making-python-programs-blazingly-fast-c1cd79bd1b32

转自:https://mp.weixin.qq.com/s/hidWQghW3Gy_ysqGlS5MRA

干掉服务状态!从 Session 到 Token

来自公众号:会点代码的大叔

在讲Token之前,先简单说说什么是 Session 和 Cookie。

首先要知道 HTTP 请求是无状态的;

无状态的意思就是:每一次请求都是独立的;每一次请求不会受到前面请求的影响,也不会影响后面的请求;

比如我们登录一个系统的时候,验证用户名密码之后,打开系统各个页面的时候就不需要再进行登录操作了,直到我们主动退出登录或超时退出登录;为了让服务器有“记忆功能”,我们可以用到 Session、Cookie。

01

Cookie

是在客户端(浏览器)保存用户信息的一种机制;Cookie 由服务器生成,发送给浏览器,然后浏览器把 Cookie 以键值对的形式保存在客户端的某个目录下面;每种浏览器存储大小会有一些差异,一般不超过 4KB

当下一次请求的时候,会把 Cookie 发送给服务端,服务端对 Cookie 中的信息解析并验证身份。

比如你入职一个公司,会给你办一张工卡,上面有你的姓名、工号、部门等信息,你进入职场的时候,拿着工卡就可以进出。

但是 Cookie 是不可以跨域名使用的;就好像我拿着我们公司的工卡,去你们公司,保安肯定是不会放我进去的。

02

Session

保存在服务端,可以用于记录客户状态;

比如我们经常会用 Session 保存客户的基本信息、权限信息等;用户第一次登录之后,服务器就会创建一个 Session ,并将 SessionID 返回给浏览器,浏览器通常将其写入到 Cookie 中,这种 Cookie 也叫做 SessionCookie ,浏览器再次访问时,只需要拿着 SessionID 从服务端查找 Session 就可以了。

另外,这个 SessionID 不一定非要保存到 Cookie 中,只是对于浏览器客户端,大家的默认做法是放在 Cookie 中。

03

Cookie 和 Session

关于 Cookie 和 Session 的区别,很多同学会回答:“Cookie 保存在客户端,Session 保存在服务器端”,其实这样的想法并不全面:

Cookie 是一个实际存在的的东西,一个很具体的东西,就是一段数据,而 Session 是一个抽象概念,或者叫做模式方法,它有很多实现方案;

比如 Tomcat 的实现方法:把状态保存在服务端,然后生成一个 JSESSIONID 放在 Cookie 中;请求过来之后,拿着 JSESSIONID 在服务器端查询并验证状态。

干掉服务状态!从 Session 到 Token

04

Token

当然,随着用户量的增加,保存在服务端的 Session 也不断增加,这给服务端带来了很大的压力,并且如果程序是集群或分布式方式部署,同一个用户第一次请求,访问到了 A 服务器,创建了 Session,但是第二次请求却发到了 B 服务器上,但是 B 服务器上并没有之前创建的 Session;这就是分布式架构中的 Session 共享问题。

针对这个问题,我们可以进行服务器之间的 Session 同步,或者干脆把 Session 保存到第三方的组件中,例如保存到 Redis 中;但是不管是哪种方案,都让 Session 变成了项目的负担。

这时候,服务端就会想,如果 Session 不保存在我这里多好,第一次发送用户名密码给我,验证通过后我给你一个通行证,以后客户端每次请求的时候就带着这个通行证;

这个通行证就是 token,当然这个验证结果中需要包含客户端信息,服务端需要知道请求是谁发过来的;还需要包含时间信息,因为通行证不可能永远有效;通行证还不能是明文的,否则会有被截获的风险。

HMAC-SHA1:

token = user_id|expiry_date|HMAC(user_id|expiry_date, k)

AES:

token = AES(user_id|expiry_date, x)

RSA:

token = RSA(user_id|expiry_date, private key)

 

干掉服务状态!从 Session 到 Token

05

SSO 单点登录

有些公司会建设统一登录系统(单点登录),客户端先去这个系统获取 Token ,验证通过再拿着这些Token去访问其他系统;API Gateway 也可以提供类似的功能,我们公司就是这样,客户端接入的时候,先向网关获取 Token,验证通过了才能访问被授权的接口,并且一段时间后要重新或者 Token。

 

干掉服务状态!从 Session 到 Token

06

Token 和 Session

对于 session 和 token ,对比它们没有本质的区别,两者都是加密后的字符串,都可以做身份验证。当然 token 比 session 还是有一定区别的,比如 token 跨域更容易,token 更好控制等等,另外在授权场景下,token 比 session 有着更大的优势;

 

比如,我开发一个网站,允许微信用户登录,使用 token 的流程大概是这样的:

 

  • 登录网站时,跳转到微信登录页面;
  • 用户输入用户名密码登录微信后,给我们一个 token;
  • 用户拿着 token 就可以在我们的网站使用,而我们网站并不需要知道你微信的用户名和密码。

总之,如果在同一个网站内,token 和 session 并没有太大的区别,如果跨站使用,token 会更方便一些。

 

Cookie、Session 和 Token 就介绍这么多,如果有问题,大家可以加我微信或进微信群,咱们一起讨论。

转自:https://mp.weixin.qq.com/s/w9yQ323SQrYaUEGCqkD82w

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

昨天跟朋友在网上争论,100,000张床位是个什么概念。朋友觉得这不算多,还说当年你们上海30万人感染甲肝,是怎么安排下的?

对啊,我也纳闷1988年上海发生甲肝大流行,感染人数达30万之巨,但在短短两个月的时间就被消灭了,以当时的医疗条件,是怎么解决的呢?

1988年,我还没上小学,记忆一片模糊,只是隐约知道,家里有亲戚也感染了。带着这个疑问,我采访了我妈,一个上海老阿姨。

1988年,我妈34岁,是上海一个小厂的领导,算是全程亲历了这次上海历史上最大的疫情。结合她的回忆跟一些资料,我大概搞清楚了上海是如何打赢这场仗的。

沿海人们爱吃海鲜,在小龙虾得宠前,上海人最爱的是一种蚌壳类海鲜,学名毛蚶。这个东西我后来吃过,又小又难剥,但确实很鲜美。现在它很少上上海人的餐桌了,大部分上海人都对这个东西心有余悸,因为毛蚶几乎成了甲肝的代名词。

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

88年以前,几乎三分之一的上海家庭每年都要吃毛蚶。这个小东西又便宜,吃起来还颇有剥瓜子的乐趣,比小龙虾、大闸蟹更受欢迎。那一年江苏启东的毛蚶大丰收,毛蚶的售价跌到了新低。想想如果小龙虾跌到10块一斤会出现什么场景吧!

来自启东的渔船,一船一船,源源不断地给上海人送来了大量便宜又新鲜的毛蚶。成千上万的上海家庭争相大快朵颐。据我妈回忆,听说运送毛蚶的船原来运过大粪,没有消毒干净,造成船上的毛蚶带了甲肝病毒。但据权威资料说,当年启东整片水域都被污染了。

由于上海人吃毛蚶时,怕其肉质变老,故而开水里一烫,蚌壳微张就吃,所以病毒根本就没被杀灭。据统计当时上海有230万人吃了毛蚶,最终感染者达到了近30万。其中大部分是直接吃毛蚶感染的,但也有一部分人是因为卫生习惯不好导致的粪口感染。

一个城市近30万人感染,这是什么概念?如果当年有微信,大概会炸裂吧。光我妈那个300来人的小厂,就有50多个人感染。自从88年1月中爆出第一例甲肝,几乎每天都要增加一两百例,半个月后,一天新增感染数就达到了1万例!

到了2月1日那一天,竟然单日就有19000人爆发了甲肝症状。现在的我们只能从这些数字感受当年的恐怖气氛。

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

但是据我妈回忆,当时并没有全市乱成一锅粥,因为上海政府反应奇快。甲肝潜伏期15-30天不等,第一波甲肝病人出现时,上海政府就行动起来了。

1988年,当时还没有网络,主要信息获取渠道是电视、报纸和广播。每天上海最大的报纸《新民晚报》、《文汇报》都会刊登最新的疫情,刊登各种防疫科普文章呼吁老百姓不要吃毛蚶了,只可惜甲肝潜伏期太长,此前该吃的人差不多都已经吃了。

1988年之前,上海的卫生普及情况做得并不算好。还是有很多人饭前便后不洗手,这直接导致了许多没有吃毛蚶的人也感染了甲肝病毒。

疫情发生后没几天,上海市政府就在全市禁止毛蚶售卖,禁食毛蚶,收缴销毁了一大批毛蚶。随后对市民们进行了360度全方位无死角的洗脑式卫生宣传。

据我妈回忆,那年一打开电视,上海本地电视台和广播都在连续十几个小时地滚动科普:甲肝是咋回事,有哪些症状,要如何防范,如何洗手,如何消毒,发现甲肝症状一定要上报登记、集中进行隔离等等。

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

街道、居委会则挨家挨户发宣传单,顺便排查居民有没有甲肝症状,对于一些家里没有广播、电视的居民,居委会大妈,楼长也会上门做宣传。我妈厂里的广播每天也要播放2次甲肝宣传内容。

上海人就是从那时候起落下了全民处女座的毛病。如果外地媳妇儿找了个上海婆婆,就能体会到上海人带娃那叫一个精细,她们会随时把“洗手”“消毒”挂在嘴边,看到别人外面回来没洗手,立马就会跳起来,大惊小怪地嗔怒。大部分上海人家里都有一瓶“84消毒液”,这些习惯都是那年甲肝的“后遗症”。

解决了继发感染的问题,那30万病人如何安排的呢?

当时上海所有的医院,包括内科外科,统统加起来满打满算只有5.5万张床位。30万人,不到6万床位,怎么办呢?

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

那就让全民一起动员起来吧!我妈所在的厂专门腾出了一幢宿舍楼,把50多个患甲肝的职工统一隔离起来。这些人也不回家,就住在厂里隔离。

1988年,上海90%以上的企业都是国有企业或集体所有制企业。300多人的厂就配有托儿所、幼儿园、厂医、食堂、宿舍。

当时上海喊出的口号是“谁的人,谁管。”许多企业都开辟了厂房、库房等来安置甲肝病人。床不够,有钱的企业紧急采购一批简易钢丝床,没条件的企业也有用木板临时搭床。

没有工作的人怎么办呢?就由街道里弄想办法安置隔离。刚好甲肝爆发遭遇寒假,就征用了一部分学校来安置工厂安排不了的病人。几张课桌一拼就是一张床。

甲肝症状还是很明显的,每一个出现症状的患者都自动自觉自发地汇报给厂里或居委会。上海人惯来胆小、守纪律的性格成了一种优势,每个人都怕传染给家人、邻居,完全不敢隐瞒不报,都很信任厂委和街道。更何况待在家还得麻烦亲人照顾自己,集中隔离的话治疗和三餐都不用操心,为什么不去?

亲历者:当年上海甲肝30万人,是怎么安排好床位,两个月扑灭的

根据“谁的人,谁管”的原则,除了重症病人被送到医院救治,症状比较轻,情况稳定的病人都分散在上海各处,集中隔离。员工有食堂给他们做一日三餐,有厂医给他们开药。我妈作为厂领导每天要负责给病号送饭。进隔离区前,要先穿好白大褂,带好口罩和手套,出来后这一套装备立刻泡消毒液里消毒。一直到厂医认定病人痊愈且不会再传染后,才会把人从隔离区放出来。

1988年,人都很单纯。从市政府起,一级一级领导向下级传达不要恐慌,好好预防就一定能战胜甲肝病毒的信心。而老百姓虽然也恐慌,也焦虑,但他们无条件地信任着政府。

我不知道换一个城市,换一个时间,结果会不会不同。

总之,上海在短短2个月内妥善地安排好30万甲肝患者,自3月起每天新增病例都在减少,当时国际上普遍预测春节后会迎来甲肝第二轮大爆发。但春暖花开后,病毒便徐徐去矣。

回忆这场席卷了整座城市的浩劫,经历了一切的我妈骄傲地说:那是每一个上海人的胜利,每个人都尽到了自己的本分。

若每个人都尽到本分,则何事可惧?

亦君:不吹不黑,咱上海人一向听话,当年非典若大城市,只有那么几例。即便如此,也楼道、小区也每天都消毒,宣传和行动一样都没落下。

眼前这场仗能不能打赢,就看每个人能不能都尽到自己的本分。该戴口罩戴口罩,不让乱跑就不乱跑,则病毒何惧?

转自:https://mp.weixin.qq.com/s/yEZInLDgUnq4_TVbqJO8UQ

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

就在昨天,湖北省红十字会终于公布了第一批捐赠物资的使用情况。然而,在公布的明细中,竟然出现了莆田系民营医院,真是让人大跌眼镜。

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

图:武汉仁爱医院分到1.6万个N95口罩

表格显示,这次物质分配,N95口罩(医用)一共36000个,其中分别给武汉仁爱医院1.6万个,武汉天佑医院1.6万个。

首先,武汉仁爱医院是标准的莆田系民营医院,他们即不在这次肺炎疫情的征用名单中,也不是发热门诊定点单位,试问为何要给他们1.6万个医用级口罩?

其次,1.6万+1.6万=3.2万,多出的4000个去哪里了?

 

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

图:协和医院抗战在一线只分配到3000个普通口罩

再来看看收治肺炎的一线公立医院-协和医院,他们只分配到了3000个口罩。协和医院是国家首批三级甲等医院,作为武汉甚至全国知名医院,协和医院奋战在抗击疫情的一线。这里有成千上百的医生、护士、专家,竟然分配到的口罩还不如一个民营医院!

就在今天,一则关于协和医院医疗物资的求援信息在网上流传,且用词颇为急切“不是告急!是没有了!”

“协和医生Do先生”在微博发文称:“我们保卫武汉,请求你们支援我们!武汉协和医院再次求助!刚刚得到消息,我们的物资即将全部用尽!恳请转发!抱歉!”

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

图:人民日报为协和医院发声,物质即将用尽

早在6天前即1月24日,协和医院就曾在其官方微信中发出《协和医院接受爱心捐赠的公告与说明》,称急需社会各界依法合规爱心捐赠下列防护物资,即:护目镜、N95口罩、外科口罩等。

比较愤怒的是,在湖北省红十字会公布的第一捐赠物资使用中,他们除了分到3000个口罩之外,再没有其他的了。

网友不满湖北省红十字不作为!

麻烦出来解释一下,为什么协和医院只拿到3000个口罩,而武汉仁爱医院和天佑医院拿到了三万六千个!

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

图:网友不满湖北红字后使用捐赠物质

我能理解的字面意思就是,一个没有设置发热门诊,不是新型肺炎定点医疗机构的以生殖健康妇产科等为主的私立医院,红会直接拨了1.6w最紧缺的n95过去,然后协和医院3000个普通口罩。

武汉仁爱医院,从湖北红会领了1.6万个N95口罩,协和医院领了3000个,希望公开这家私立医院在防控中的作用。另外,你们识数吗,两个1.6万等于3.6万吗?

附:湖北省红十字会防控新冠肺炎捐赠物资使用情况公布表

愤怒!危机关头,湖北红十字会竟把口罩送给“莆田系医院”

转自:https://mp.weixin.qq.com/s/fA2UY7n6z_3XgvIOcEn0lQ

人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?

人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
昨天,“在人间”有一篇文章在朋友圈刷了屏
那篇文章来自武汉一个叫倩倩的女孩的口述,在农历新年第一天,倩倩的妈妈在隔离病房里去世,而她的爸爸、哥哥也先后感染
很多人看了这篇文章都忍不住流眼泪,因为那种无能为力和失去至亲的感觉真的太痛了,我们也从未如此真实的意识到人类的脆弱…
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
随着疫情的扩散与加重,这几天微博上各式各样的求助帖越来越多,很多人的亲人都被感染,甚至病危
我们知道在武汉、在湖北、乃至全国各地,有人一夜之间失去了骨肉至亲
我们也知道很多医务工作者正在不分昼夜的轮番工作、披星戴月战斗在一线,与病毒作斗争
可是实际上,这场因病毒引起的瘟疫所带来的不良影响,却不仅仅如此
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
对于很多年轻人来说,包括我身边的一些朋友都只是感觉到疫情很严重,所以我们的假期延长了
可是,疫情的影响是全方位的,我们忽略了一些与我们切身相关的东西
是的,在这场瘟疫中有人失去了父母,而同时也有很多人因此倾家荡产、食不果腹,开始为一日三餐发愁
那是关于疫情环境下的另一幅画——“众生皆苦图”
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
今年冬天对于养殖业的农民来说,是一个切切实实的寒冬
以养鸡为例,由于疫情的扩散,饲料厂无法开工,很多小鸡都没有饲料喂
而很多人因为怕感染病毒,见活禽色变,所以也不会买鸡
除此之外大部分屠宰场、活禽市场都关闭了,导致成品活禽根本卖不出去、无处可销
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
鸡每天吃的饲料要花钱,当初养鸡借的贷款也要还
很多农民血本无归、走投无路之下,只能眼睁睁的看着那些辛辛苦苦养大的鸡饿死,或者把它们都埋了…
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
除了养殖业,种植业农民的日子也不好过
广东地区每年春节期间都会举办花市,传统花市在个别地方花市会开放10几天,每天开放至凌晨2点,但今年受肺炎疫情影响,广东地区的花市提前结束了
因为花市闭市,运回家又要花钱,很多花农只能把花都砸了
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
不仅花农,还有不少果农也遇到了类似的情况,他们都只能把辛苦培育的作物亲手毁掉
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
在这类信息下,很多人都在问“与其毁掉,免费送给大家不好吗?
这其实这是农民们没有办法的办法
如果把东西运走,那就是在本来就亏本的情况下又亏一笔运费
如果贱卖或免费送人,那就会扰乱市场价格,别人的生意、明年的生意都没法做了
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
由于封城与封路,许多农民们一年来的辛勤耕耘与投资都付之东流,血汗钱一分都赚不到,甚至还可能要赔钱…
你看,受疫情影响最大的真的都是这些底层人民们
而除了农民与劳动者,那些本本分分过日子的底层老百姓,他们的处境也很让人心酸
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
昨天,我在微博上看到这个老爷爷的图片与视频,这是在河北地区的一个农村,老爷爷戴着口罩卖一块钱一根的糖葫芦
 
河北每一个村子基本都封了,街上也没有人,这个老爷爷几乎一根糖葫芦都没卖出去
视频里监督员为了村民和老爷爷的不受感染一直在催促他离开,语气也特别严厉
这个老爷爷一句话也不敢说,只把糖葫芦一个个摘下来放到箱子里,骑着小车走了
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
还有很多像这个老爷爷一样的小摊小饭,他们在年前进了不少货物,例如几百斤鸡蛋、几百根彩绳…
就等着春节期间趁着人流量大的时候,在集市上卖出去,好在年底赚个辛苦钱,可是一切都毁了
对于大部分底层人民与劳动者来说,春节其实是他们最有希望挣到钱的时候,可是天灾人祸毁掉了他们的希望
由于信息闭塞或知识落后,他们有的根本都不知道发生了什么,这就是亿万谋生活的老百姓的缩影!
太难了,真的太难了
他们也没想大富大贵,只想老实本分过日子却也这么难,真的太让人难受了
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
“那些在武汉等公交车的农民工们不知道,公交车再也不会来,他们也回不去了”
这是武汉封城后,我看到最让人心碎的一条评论
对于很大一部分像农民工一类的底层劳动力,他们靠卖苦力生活,有的年纪很大,也没有手机,不清楚疫情到底发展到何种情况
他们可能会幸运地躲过病毒,可是没人知道他们能否躲过疫情导致的连锁效应带来的伤害
 
而这种伤害,很可能是致命的
知乎上有句话是这么说的
“所以受委屈最大的,其实是知乎上没什么声音的工人。你跟他们讲隔离讲防疫,但你没法帮他们交房租水电、一日三餐。” 
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
这次疫情的出现,突然让我意识到,个体的悲欢苦难在天灾人祸前真的太渺小了,太渺小了
这种深深地“无能为力”感才让人揪心
可是即便这样,我们还是会看到一些哪怕身陷泥泞、却仍然忧心天下的人
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
1月27日,浙江湖州一位83岁的拾荒老人林大爷来到社区,匿名捐赠了1万元
他对社区工作人员说“国家有难,我现在要回馈”
 
“你一定要写名字,就写知恩者”
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
林大爷的善举被媒体报道后,很多人都非常感动,之后湖州当地有一位网友牵头,号召爱心人士们众筹了一万元,送到了林大爷家
可没想到,林大爷又把这一万元送到了社区打算再次捐出
社区了解老人的家庭情况,林大爷的老伴今年84岁,瘫痪在床,林大爷平时除了拾荒,还要照顾老伴,家境并不富裕,所以社区没有接受这笔款项
随后,林大爷又去了银行,把那一万块钱汇到了湖州市吴兴区红十字会账户
 
他说,大家的好意心领了,自己只是做了一名“知恩者”该做的事
 
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
前几天,潇湘晨报报道了一则新闻——常德澧县城头山镇黄河村村民郝进一次性捐出了15000只医用防护口罩
他的口罩是哪里来的呢?
去年郝进曾在一家口罩厂打工,“后来工厂效益也不好,我就辞职了。当时工厂发不出工资,就给了我价值两万元的口罩用以抵工资”
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
今年春节期间,郝进从新闻上了解到疫情紧急,口罩十分紧缺,就联系村里把家里的一万五千只口罩全都捐了
“村里先给每位村民免费发放了一部分,其余的就都给县里了,自己只留了几个供家里人使用”
 
其实,按照疫情后市场上口罩的供不应求程度,如果郝进用正常的价格把口罩都卖出去,完全是可以拿回属于他的工钱的,但是他没有这么做
后来他又从家里翻出3000个口罩,共计一万8千个口罩,全都捐了
你看,卖炭翁捐了用炭换来的半匹红纱
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
昨晚临睡前,还有一条让我哭到眼睛肿起来的新闻
杭州有位退休的环卫工人,前几天把自己全部积蓄都捐给了慈善总会,10万块划出去后,他的银行卡里只剩下13块7毛8分
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
看到这些内容,我真的说不出什么高屋建瓴的大话空话
真的太苦了、太善良了,可是真的太苦了
我不知道在我们看不到的地方,有多少人正品味着人间疾苦,也不知道多少人在苦难中,仍然汲汲于希望与美好
每当在这个时候真的很痛恨自己无能为力,做不了什么
可回想鲁迅先生曾说,愿中国青年都摆脱冷气,只是向上走,不必听自暴自弃者流的话,能做事的做事,能发声的发声,有一分热,发一分光;
就令萤火一般,也可以在黑暗里发一点光,不必等候炬火
人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?
我想我能做的,也不过是把这些写出来
尽管我们个人没什么力量对抗时代的风浪,可是我们能做的,或许还有很多
——要坚强,要镇定,要尽可能的互帮互助,要尽力做好自己的本职工作,不要说也不去听信自暴自弃的话语
只有大环境是稳定向上的,个人的得失才更能被看到,才有价值和意义
只希冀这场瘟疫尽快过去,国泰民安,大家的日子不要再这么苦了

写在最后

疫情发展到今天的这种程度,我不知道有多少人能意识到它和我们每个人都息息相关,并不仅仅关乎于我们多放了几天假期
坦白来讲,它对整个国家的经济可能会造成颠覆性的打击
单就各行各业而言,商场、景区、导游、策划、客运、旅行社、酒店、饭店基本都不能幸免
工厂里工人不能复工,机器设备停摆,干放着一天就亏一天的钱,制造业企业主的心急出火了也没用
餐饮业一夜之间也流水骤降,但食材成本和人力成本、前期投入却根本收不回,很多网友看到饭店把准备好的菜品拿到路边卖,还有一些酒家在打折卖半成品和省现存货…这些都是真实的人间疾苦
覆巢之下,安有完卵?
哪怕是这个灾难结束后,我们的国家的经济可能都会经历很久的“余震”,我们还不知道我们将要面对什么
但是,这是一场事关全国的战斗,希望我们都能一起熬过去
转自公众号:不假装出版社

人间疾苦|疫情环境下,亿万底层老百姓过的有多苦?

转自:https://mp.weixin.qq.com/s/afXSLOc40E08LTYFEq1_ZQ