范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

并发编程下

  多进程开发
  进程是计算机中资源分配的最小单元;一个进程中可以有多个线程,同一个进程中的线程共享资源;
  进程与进程之间则是相互隔离。
  Python中通过多进程可以利用CPU的多核优势,计算密集型操作适用于多进程。 进程介绍import multiprocessing  def task(): 	pass  if __name__ == "__main__":     p1 = multiprocessing.Process(target=task)     p1.start()from multiprocessing import Process  def task(arg): 	pass  def run():     p = multiprocessing.Process(target=task, args=("xxx",))     p.start()  if __name__ == "__main__":     run()
  关于在Python中基于multiprocessiong模块操作的进程:
  fork ,【"拷贝"几乎所有资源】【支持文件对象/线程锁等传参】【unix】【任意位置开始】【快】
  spawn ,【run参数传必备资源】【不支持文件对象/线程锁等传参】【unix、win】【main代码块开始】【慢】
  forkserver ,【run参数传必备资源】【不支持文件对象/线程锁等传参】【部分unix】【main代码块开始】
  官方文档:https://docs.python.org/3/library/multiprocessing.html
  示例1 import multiprocessing import time  """ def task():     print(name)     name.append(123)   if __name__ == "__main__":     multiprocessing.set_start_method("fork")  # fork、spawn、forkserver     name = []      p1 = multiprocessing.Process(target=task)     p1.start()      time.sleep(2)     print(name)  # [] """ """ def task():     print(name) # [123]   if __name__ == "__main__":     multiprocessing.set_start_method("fork")  # fork、spawn、forkserver     name = []     name.append(123)      p1 = multiprocessing.Process(target=task)     p1.start() """  """ def task():     print(name)  # []   if __name__ == "__main__":     multiprocessing.set_start_method("fork")  # fork、spawn、forkserver     name = []          p1 = multiprocessing.Process(target=task)     p1.start()      name.append(123)      """
  示例2 import multiprocessing   def task():     print(name)     print(file_object)   if __name__ == "__main__":     multiprocessing.set_start_method("fork")  # fork、spawn、forkserver          name = []     file_object = open("x1.txt", mode="a+", encoding="utf-8")      p1 = multiprocessing.Process(target=task)     p1.start()
  案例: import multiprocessing   def task():     print(name)     file_object.write("alex ")     file_object.flush()   if __name__ == "__main__":     multiprocessing.set_start_method("fork")          name = []     file_object = open("x1.txt", mode="a+", encoding="utf-8")     file_object.write("武沛齐 ")      p1 = multiprocessing.Process(target=task)     p1.start()import multiprocessing   def task():     print(name)     file_object.write("alex ")     file_object.flush()   if __name__ == "__main__":     multiprocessing.set_start_method("fork")          name = []     file_object = open("x1.txt", mode="a+", encoding="utf-8")     file_object.write("武沛齐 ")     file_object.flush()      p1 = multiprocessing.Process(target=task)     p1.start()import multiprocessing import threading import time  def func():     print("来了")     with lock:         print(666)         time.sleep(1)  def task():     # 拷贝的锁也是被申请走的状态     # 被谁申请走了? 被子进程中的主线程申请走了     for i in range(10):         t = threading.Thread(target=func)         t.start()     time.sleep(2)     lock.release()   if __name__ == "__main__":     multiprocessing.set_start_method("fork")     name = []     lock = threading.RLock()     lock.acquire()     # print(lock)     # lock.acquire() # 申请锁     # print(lock)     # lock.release()     # print(lock)     # lock.acquire()  # 申请锁     # print(lock)      p1 = multiprocessing.Process(target=task)     p1.start()常见功能
  进程的常见方法: p.start()  ,当前进程准备就绪,等待被CPU调度(工作单元其实是进程中的线程)。 p.join()  ,等待当前进程的任务执行完毕后再向下继续执行。 import time from multiprocessing import Process   def task(arg):     time.sleep(2)     print("执行中...")   if __name__ == "__main__":     multiprocessing.set_start_method("spawn")     p = Process(target=task, args=("xxx",))     p.start()     p.join()      print("继续执行...")p.daemon = 布尔值  ,守护进程(必须放在start之前) p.daemon =True  ,设置为守护进程,主进程执行完毕后,子进程也自动关闭。 p.daemon =False  ,设置为非守护进程,主进程等待子进程,子进程执行完毕后,主进程才结束。 import time from multiprocessing import Process   def task(arg):     time.sleep(2)     print("执行中...")   if __name__ == "__main__":     multiprocessing.set_start_method("spawn")     p = Process(target=task, args=("xxx",))     p.daemon = True     p.start()      print("继续执行...")进程的名称的设置和获取 import os import time import threading import multiprocessing   def func():     time.sleep(3)   def task(arg):     for i in range(10):         t = threading.Thread(target=func)         t.start()     print(os.getpid(), os.getppid())     print("线程个数", len(threading.enumerate()))     time.sleep(2)     print("当前进程的名称:", multiprocessing.current_process().name)   if __name__ == "__main__":     print(os.getpid())     multiprocessing.set_start_method("spawn")     p = multiprocessing.Process(target=task, args=("xxx",))     p.name = "哈哈哈哈"     p.start()      print("继续执行...")自定义进程类,直接将线程需要做的事写到run方法中。 import multiprocessing   class MyProcess(multiprocessing.Process):     def run(self):         print("执行此进程", self._args)   if __name__ == "__main__":     multiprocessing.set_start_method("spawn")     p = MyProcess(args=("xxx",))     p.start()     print("继续执行...") CPU个数,程序一般创建多少个进程?(利用CPU多核优势)。 import multiprocessing multiprocessing.cpu_count()import multiprocessing  if __name__ == "__main__":     count = multiprocessing.cpu_count()     for i in range(count - 1):         p = multiprocessing.Process(target=xxxx)         p.start()进程间数据的共享
  进程是资源分配的最小单元,每个进程中都维护自己独立的数据,不共享。 import multiprocessing   def task(data):     data.append(666)   if __name__ == "__main__":     data_list = []     p = multiprocessing.Process(target=task, args=(data_list,))     p.start()     p.join()      print("主进程:", data_list) # []
  如果想要让他们之间进行共享,则可以借助一些特殊的东西来实现。 共享
  Shared memory
  Data can be stored in a shared memory map using  Value   or  Array  . For example, the following code【 数据可以使用Value或Array存储在共享内存映射中。 例如下面的代码  】  "c": ctypes.c_char,  "u": ctypes.c_wchar,     "b": ctypes.c_byte,  "B": ctypes.c_ubyte,      "h": ctypes.c_short, "H": ctypes.c_ushort,     "i": ctypes.c_int,   "I": ctypes.c_uint,  (其u表示无符号)     "l": ctypes.c_long,  "L": ctypes.c_ulong,      "f": ctypes.c_float, "d": ctypes.c_doublefrom multiprocessing import Process, Value, Array   def func(n, m1, m2):     n.value = 888     m1.value = "a".encode("utf-8")     m2.value = "武"   if __name__ == "__main__":     num = Value("i", 666)     v1 = Value("c")     v2 = Value("u")      p = Process(target=func, args=(num, v1, v2))     p.start()     p.join()      print(num.value)  # 888     print(v1.value)  # a     print(v2.value)  # 武from multiprocessing import Process, Value, Array   def f(data_array):     data_array[0] = 666   if __name__ == "__main__":     arr = Array("i", [11, 22, 33, 44]) # 数组:元素类型必须是int; 只能是这么几个数据。      p = Process(target=f, args=(arr,))     p.start()     p.join()      print(arr[:])
  Server process
  A manager object returned by  Manager()   controls a server process which holds Python objects and allows other processes to manipulate them using proxies.
  【manager()返回的管理器对象控制一个服务器进程,该进程保存Python对象,并允许其他进程使用代理操作这些对象。  】from multiprocessing import Process, Manager  def f(d, l):     d[1] = "1"     d["2"] = 2     d[0.25] = None     l.append(666)  if __name__ == "__main__":     with Manager() as manager:         d = manager.dict()         l = manager.list()          p = Process(target=f, args=(d, l))         p.start()         p.join()          print(d)         print(l)交换
  multiprocessing   supports two types of communication channel between processes
  【支持两种进程之间的通信通道  】
  Queues
  The  Queue   class is a near clone of  queue.Queue  . For example import multiprocessing   def task(q):     for i in range(10):         q.put(i)   if __name__ == "__main__":     queue = multiprocessing.Queue()          p = multiprocessing.Process(target=task, args=(queue,))     p.start()     p.join()      print("主进程")     print(queue.get())     print(queue.get())     print(queue.get())     print(queue.get())     print(queue.get())
  Pipes
  The  Pipe()   function returns a pair of connection objects connected by a pipe which by default is duplex (two-way). For example:
  函数返回一对由管道连接的连接对象,该管道默认为双工(双向)。 例如:  import time import multiprocessing   def task(conn):     time.sleep(1)     conn.send([111, 22, 33, 44])     data = conn.recv() # 阻塞     print("子进程接收:", data)     time.sleep(2)   if __name__ == "__main__":     parent_conn, child_conn = multiprocessing.Pipe()      p = multiprocessing.Process(target=task, args=(child_conn,))     p.start()      info = parent_conn.recv() # 阻塞     print("主进程接收:", info)     parent_conn.send(666)
  上述都是Python内部提供的进程之间数据共享和交换的机制,作为了解即可,在项目开发中很少使用,后期项目中一般会借助第三方的来做资源的共享,例如:MySQL、redis等。 进程锁
  如果多个进程抢占式去做某些操作时候,为了防止操作出问题,可以通过进程锁来避免。 import time from multiprocessing import Process, Value, Array   def func(n, ):     n.value = n.value + 1   if __name__ == "__main__":     num = Value("i", 0)      for i in range(20):         p = Process(target=func, args=(num,))         p.start()      time.sleep(3)     print(num.value)import time from multiprocessing import Process, Manager   def f(d, ):     d[1] += 1   if __name__ == "__main__":     with Manager() as manager:         d = manager.dict()         d[1] = 0         for i in range(20):             p = Process(target=f, args=(d,))             p.start()         time.sleep(3)         print(d)import time import multiprocessing   def task():     # 假设文件中保存的内容就是一个值:10     with open("f1.txt", mode="r", encoding="utf-8") as f:         current_num = int(f.read())      print("排队抢票了")     time.sleep(1)      current_num -= 1     with open("f1.txt", mode="w", encoding="utf-8") as f:         f.write(str(current_num))   if __name__ == "__main__":     for i in range(20):         p = multiprocessing.Process(target=task)         p.start()
  很显然,多进程在操作时就会出问题,此时就需要锁来介入: import time import multiprocessing   def task(lock):     print("开始")     lock.acquire()     # 假设文件中保存的内容就是一个值:10     with open("f1.txt", mode="r", encoding="utf-8") as f:         current_num = int(f.read())      print("排队抢票了")     time.sleep(0.5)     current_num -= 1      with open("f1.txt", mode="w", encoding="utf-8") as f:         f.write(str(current_num))     lock.release()   if __name__ == "__main__":     multiprocessing.set_start_method("spawn")          lock = multiprocessing.RLock() # 进程锁          for i in range(10):         p = multiprocessing.Process(target=task, args=(lock,))         p.start()      # spawn模式,需要特殊处理。     time.sleep(7)import time import multiprocessing import os   def task(lock):     print("开始")     lock.acquire()     # 假设文件中保存的内容就是一个值:10     with open("f1.txt", mode="r", encoding="utf-8") as f:         current_num = int(f.read())      print(os.getpid(), "排队抢票了")     time.sleep(0.5)     current_num -= 1      with open("f1.txt", mode="w", encoding="utf-8") as f:         f.write(str(current_num))     lock.release()   if __name__ == "__main__":     multiprocessing.set_start_method("spawn")     lock = multiprocessing.RLock()      process_list = []     for i in range(10):         p = multiprocessing.Process(target=task, args=(lock,))         p.start()         process_list.append(p)      # spawn模式,需要特殊处理。     for item in process_list:         item.join()import time import multiprocessing  def task(lock):     print("开始")     lock.acquire()     # 假设文件中保存的内容就是一个值:10     with open("f1.txt", mode="r", encoding="utf-8") as f:         current_num = int(f.read())      print("排队抢票了")     time.sleep(1)     current_num -= 1      with open("f1.txt", mode="w", encoding="utf-8") as f:         f.write(str(current_num))     lock.release()   if __name__ == "__main__":     multiprocessing.set_start_method("fork")     lock = multiprocessing.RLock()     for i in range(10):         p = multiprocessing.Process(target=task, args=(lock,))         p.start()进程池import time from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor   def task(num):     print("执行", num)     time.sleep(2)   if __name__ == "__main__":     # 修改模式     pool = ProcessPoolExecutor(4)     for i in range(10):         pool.submit(task, i) 	print(1) 	print(2) import time from concurrent.futures import ProcessPoolExecutor   def task(num):     print("执行", num)     time.sleep(2)   if __name__ == "__main__":      pool = ProcessPoolExecutor(4)     for i in range(10):         pool.submit(task, i) 	# 等待进程池中的任务都执行完毕后,再继续往后执行。     pool.shutdown(True)     print(1) import time from concurrent.futures import ProcessPoolExecutor import multiprocessing  def task(num):     print("执行", num)     time.sleep(2)     return num   def done(res):     print(multiprocessing.current_process())     time.sleep(1)     print(res.result())     time.sleep(1)   if __name__ == "__main__":      pool = ProcessPoolExecutor(4)     for i in range(50):         fur = pool.submit(task, i)         fur.add_done_callback(done) # done的调用由主进程处理(与线程池不同)              print(multiprocessing.current_process())     pool.shutdown(True)
  注意:如果在进程池中要使用进程锁,则需要基于Manager中的Lock和RLock来实现。 import time import multiprocessing from concurrent.futures.process import ProcessPoolExecutor   def task(lock):     print("开始")     # lock.acquire()     # lock.relase()     with lock:         # 假设文件中保存的内容就是一个值:10         with open("f1.txt", mode="r", encoding="utf-8") as f:             current_num = int(f.read())          print("排队抢票了")         time.sleep(1)         current_num -= 1          with open("f1.txt", mode="w", encoding="utf-8") as f:             f.write(str(current_num))   if __name__ == "__main__":     pool = ProcessPoolExecutor()     # lock_object = multiprocessing.RLock() # 不能使用     manager = multiprocessing.Manager()     lock_object = manager.RLock() # Lock     for i in range(10):         pool.submit(task, lock_object)协程
  暂时以了解为主。
  计算机中提供了:线程、进程 用于实现并发编程(真实存在)。
  协程(Coroutine),是程序员通过代码搞出来的一个东西(非真实存在)。
  协程也可以被称为微线程,是一种用户态内的上下文切换技术。
  简而言之,其实就是通过一个线程实现代码块相互切换执行(来回跳着执行)。
  例如: def func1():     print(1)     ...     print(2)      def func2():     print(3)     ...     print(4)      func1() func2()
  上述代码是普通的函数定义和执行,按流程分别执行两个函数中的代码,并先后会输出: 1、2、3、4  。
  但如果介入协程技术那么就可以实现函数见代码切换执行,最终输入: 1、3、2、4   。
  在Python中有多种方式可以实现协程,例如: greenlet pip install greenletfrom greenlet import greenlet  def func1():     print(1)        # 第1步:输出 1     gr2.switch()    # 第3步:切换到 func2 函数     print(2)        # 第6步:输出 2     gr2.switch()    # 第7步:切换到 func2 函数,从上一次执行的位置继续向后执行      def func2():     print(3)        # 第4步:输出 3     gr1.switch()    # 第5步:切换到 func1 函数,从上一次执行的位置继续向后执行     print(4)        # 第8步:输出 4      gr1 = greenlet(func1) gr2 = greenlet(func2)  gr1.switch() # 第1步:去执行 func1 函数yield def func1():     yield 1     yield from func2()     yield 2      def func2():     yield 3     yield 4      f1 = func1() for item in f1:     print(item)
  虽然上述两种都实现了协程,但这种编写代码的方式没啥意义。
  这种来回切换执行,可能反倒让程序的执行速度更慢了(相比较于串行)。
  协程如何才能更有意义呢? 不要让用户手动去切换,而是遇到IO操作时能自动切换。
  Python在3.4之后推出了asyncio模块 + Python3.5推出async、async语法 ,内部基于协程并且遇到IO请求自动化切换。import asyncio  async def func1():     print(1)     await asyncio.sleep(2)     print(2)      async def func2():     print(3)     await asyncio.sleep(2)     print(4)      tasks = [     asyncio.ensure_future(func1()),     asyncio.ensure_future(func2()) ] loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks))""" 需要先安装:pip3 install aiohttp """  import aiohttp import asyncio  async def fetch(session, url):     print("发送请求:", url)     async with session.get(url, verify_ssl=False) as response:         content = await response.content.read()         file_name = url.rsplit("_")[-1]         with open(file_name, mode="wb") as file_object:             file_object.write(content)              async def main():     async with aiohttp.ClientSession() as session:         url_list = [             "https://www3.autoimg.cn/newsdfs/g26/M02/35/A9/120x90_0_autohomecar__ChsEe12AXQ6AOOH_AAFocMs8nzU621.jpg",             "https://www2.autoimg.cn/newsdfs/g30/M01/3C/E2/120x90_0_autohomecar__ChcCSV2BBICAUntfAADjJFd6800429.jpg",             "https://www3.autoimg.cn/newsdfs/g26/M0B/3C/65/120x90_0_autohomecar__ChcCP12BFCmAIO83AAGq7vK0sGY193.jpg"         ]         tasks = [asyncio.create_task(fetch(session, url)) for url in url_list]         await asyncio.wait(tasks) if __name__ == "__main__":     asyncio.run(main())
  通过上述内容发现,在处理IO请求时,协程通过一个线程就可以实现并发的操作。
  协程、线程、进程的区别?线程,是计算机中可以被cpu调度的最小单元。 进程,是计算机资源分配的最小单元(进程为线程提供资源)。 一个进程中可以有多个线程,同一个进程中的线程可以共享此进程中的资源。  由于CPython中GIL的存在: 	- 线程,适用于IO密集型操作。     - 进程,适用于计算密集型操作。  协程,协程也可以被称为微线程,是一种用户态内的上下文切换技术,在开发中结合遇到IO自动切换,就可以通过一个线程实现并发操作。   所以,在处理IO操作时,协程比线程更加节省开销(协程的开发难度大一些)。
  现在很多Python中的框架都在支持协程,比如:FastAPI、Tornado、Sanic、Django 3、aiohttp等,企业开发使用的也越来越多(目前不是特别多)。

绝杀惊天绝杀历史性绝杀!王嘉南最后一跳拿下世锦赛跳远金牌王嘉南最后一跳完成奇迹式飞跃。没有什么比绝杀更令人感到惊喜和刺激了!在17日上午进行的2022年田径世锦赛男子跳远决赛的比赛中,前5次试跳结束之后仅以8。03米排名第5位的中国25它被称为聪明之果,要常给孩子吃,眼睛好记忆力强,不懂亏了它被称为聪明之果,要常给孩子吃,眼睛好记忆力强,不懂亏了水果是我们一年四季都要吃得,常吃水果对身体好,每个季节都有应季的水果,要说这7月最该吃什么水果,那莫过于蓝莓了,以前我们买一喝温水还是凉水?哪个选择更健康?上海气温连日居高不下,我的喝水量也明显增加。关于喝水问题,家里老人反复强调要喝温热水,而我平常却喜欢喝冷水。许多国家的古代医学都有喝温热水有利健康的说法,但是一直缺乏严格的科学验证8种更健康的蔬菜在你的饮食中加入各种各样的蔬菜对于促进最佳健康至关重要。生的和煮熟的蔬菜都提供纤维和必需的维生素和矿物质,例如钾叶酸和维生素AC和E,一些蔬菜在煮熟后对健康有益。烹饪可以改变它们的建议中老年人牢记多吃3宝,少食2物,整个伏天都舒坦建议中老年人牢记多吃3宝,少食2物,整个伏天都舒坦伴随着夏夜阵阵的晚风,初伏悄然而至,悄悄地拉开伏天的序幕。虽然是初入伏天,我们也要注意顺应气温进行自我调整,尤其是身体机能有所退化补钙别只吃钙片,4种天然高钙食物,是补钙好帮手,建议常吃钙,对每个人来说,都是一种相当重要的元素。它是身体内部的养分,也是维持健康的源泉。但钙质虽好,却不长久。它会随着时间而消逝,影响人们的身体,而这种影响对于老年人来说最为严重。所以补儿童读物再出事,粗俗不堪矛头直指易中天?不,插图绘制者继毒教材之后,又一个儿童读物出问题了!这次是易中天中华经典故事易中天?中华经典故事?难道是篡改?不不不,别着急乱猜,这次不是内容的问题,而是插图被指低俗。看一下朕除了泡妞泡吧不会别儿童早期教育的关键时期,家长应该教些什么?儿童是祖国的未来儿童的健康成长是我们的心愿俗话说三岁看大,七岁看老科学研究发现也告诉我们儿童早期发展对人的终身健康和发展具有至关重要的作用本期嘉宾童连复旦大学公共卫生学院副教授日本古埃及的红色唇膏是由甲虫制成的?关于化妆品的7个有趣事实现如今,我们可以在商店里找到各种各样的化妆品。经常购买的女性会非常关注化妆品的一些信息,例如,它们是否使用天然材料,是否适合自己的皮肤和妆容。化妆品的历史比很多人想象的要更长,而且寒性体质易致癌!如何增加阳气?癌症患者也能用的升阳方法现在已经是7月中旬,从今天起将开启三伏天的序幕,入伏后,全国各地即将开启桑拿模式和蒸烤模式,虽然天越来越热,但也是一个调理养生的好时机。中医主张天人合一顺时养生,顺应自然的变化而改电商的未来在于回归实体文孟永辉当电商时代的红利开始出清,仅仅只是依靠传统意义上的规模和效率的方式业已无法获得持续发展,这是我们看到的以阿里京东为代表的电商平台之所以会如此迫切地寻找转型之道的根本原因。在69岁的布丽吉特满满的少女心,美貌气质,成峰会太太团颜值担当69岁的布丽吉特虽说年纪不小了,但在美貌和气质方面还是相当不错的,在近期开展的峰会上更是成为太太团的颜值担当。不仅比她小25岁的丈夫马克龙全程都和她手牵手秀恩爱,就连各国夫人与其同少女变辣妈,娱乐圈这九位女明星,生完孩子后怎么更美了?都说生孩子后的妈妈会瞬间老十岁,但是娱乐圈的女明星生孩子之后不仅没老,还比少女时期更好看了,这究竟是什么原因呢?第一位孙怡出生于1993年的孙怡有着170公分的模特身材,加上和李沁离婚25年后,戈伟如独自带娃似少女,林志隆儿女双全幸福美满文2号探秘人编辑2号探秘人提起台湾第一美女的名号,很多人脑海中会不自觉浮现出林志玲的名字。然而众人不知道的是,在上个世纪还没有整容术没有滤镜的七八十年代,还有一个戈伟如。然而就是梨逃离加长版三伏天,长三角这些神仙地方竟不到30今天,为期40天的加长版三伏天正式开启,南方大范围高温持续,江苏浙江安徽等多地最高气温达3739,局地可达40以上。可能会出乎你意料的是,长三角竟还有些地方最高气温没超过30不禁让上新丨20款新品,北邦夏日囤货季来了久居城市的人们贪图凉意,婉拒了向山而行的邀约,而山里自有山里的热闹。溪流之中,任凭溪水漫过脚背的酥痒,一猛子扎进水中的畅快,夜晚时的繁星满天,夏日的山谷是美好且快乐的。但BAREB40岁宋慧乔越长越嫩!高调晒自拍分享美貌,穿卫衣身材娇小好可爱近日宋慧乔在社交平台上晒出了一大波自己的最新自拍美照,作为韩国公认的女神,今年40岁的她,完全不受岁月的影响,反倒是越长越嫩,前段时间在巴黎可以说是大出风头,时尚品位也得到了很好的陈慧琳背景强大无人敢动,向华强礼让三分,看似低调实际大有来头陈慧琳的背景有多强大,才可以让当时叱咤风云的向华强都对她礼让三分。早年前,凭借新义安太子身份的向华强在香港混得风生水起。那时的他有权有势,可以说风光无比,可一个初出茅庐的陈慧琳,却血管堵没堵,腿部先知?医生提醒摸一摸腿部一处,粗略判断人生变好,是从好好养生开始的漫漫人生路,虽不是所有的坚持都有立竿见影的结果但一定要有一些坚持,才能获得健康您知道吗?依据流行病学资料显示,威胁国人健康的第一位疾病,不是癌症,而是血200多块的价格,能有哪些性价比好鞋?跑了100公里,帮你选了3双今天讲3双鞋,这3双鞋我倒认为都是好鞋,性价比相当高,值得一试。有的是活动价入手的,所以平均价格差不多在200左右。很多朋友可能觉得低价没好鞋,但有时候的好鞋确实会有一个低价。最经王妃都爱拎什么包?凯特王妃偏爱手拿包扮优雅,莱后的包适合通勤很多时候,大家都把焦点放在公主王妃穿了什么上面,实际上她们的配饰也很有看头。就好比造型中必备的包,不同的王室女性偏爱的包款也不同,也是能给我们普通人五花八门的搭配灵感。比如凯特,就两连败!辽宁男篮再度倒下,杨鸣主帅很愤怒球迷后继无人2022年7月16日,辽宁男篮在上次负于青岛男篮后,这一次又遭到了深圳男篮的大败。比分为89110。四节比分为2340221825281924,这样的一个比分,似乎比上一轮对阵青岛
云南这份名单,80个项目入选!近日云南省体育旅游精品项目评审委员会公布了2022年云南省体育旅游精品项目和体育文化优秀项目名单50个项目入选体育旅游精品项目30个项目入选体育文化优秀项目保山永子棋院资料图名单如云南火了!珍稀荷花大洒锦普者黑景区,红白双拼见者都有好运最近正是荷花盛开的季节,在全国各处都有一些珍稀罕见的荷花出现,比如重庆华岩寺长成了概率只有几十万分之一的并蒂莲南京玄武湖出现国宝级荷花等等。作为四季如春的云南,这种事情自然不会落下陪闺蜜上北京拉皮,结果自己做了,过程很戏剧,效果还不错变美就是要结伴而行,这样心理才踏实今天这位求美者同闺蜜一起上北京,先后做了拉皮手术,本来她胆子相对小一些,对拉皮手术剥离疼痛留疤等问题有较深顾虑,但看着闺蜜做了,没有疼的下不了床肿抗战遗址北京焦庄户地道战遗址纪念馆2022年春节,北京顺义,焦庄户地道战纪念馆及遗址之一北京焦庄户地道战遗址纪念馆北京焦庄户地道战遗址纪念馆,位于北京顺义龙湾屯镇燕山余脉歪坨山下,始建于1964年秋,初名为焦庄户民关于夏天手镯佩戴的两个错误示范炎热的夏天,玉石水晶又成为人们的腕上新宠。确实,一只洁白无暇的玉镯还是一只青翠的翡翠手镯,远看清清爽爽让人心情舒适,近瞧水水绿绿摸起来更是冰冰凉凉的。今天就为大家介绍两种不适合手镯上川岛夏日海上冲浪,打卡风车王国,无敌海景营地,赶海挖白贝在中国南部,一座小岛与大陆隔海相望这里是海上丝绸之路的必经之处在这里,曾经见证过郑和七下西洋的历史伟业在这里,曾留下新航路开辟时代那些冒险者的足迹从广州驾车2。5h到达码头坐上轮渡在昌平,发现夏日色彩!远山青黛如烟,近处繁花点彩来源北京昌平SUMMERSUMMERSUMMER在昌平发现夏日色彩大美昌平在您身边昌平环山伴水生态优美每到夏季更是处处美景色彩缤纷远山青黛如烟近处繁花点彩今天让我们一起欣赏昌平夏日夏日系列皮肤或已确定,孙尚香梦奇在列,还有星元皮肤等待上线原创兔八哥聊游戏本期精彩导读1夏日活动开启2系列皮肤预测3梦奇迎来新皮肤每一个夏天,王者荣耀都会推出夏日系列活动,而这些活动除了会给到玩家一些福利之外,就是将会推出相应的皮肤。而这从兴出发!夏日亲子游攻略来啦!悠享一日游采摘游园农家乐科普美食水上乐园又到周末了你有什么安排呢搜罗大兴游玩场所世界很大,从兴出发一天时间让你拥抱不一样的大兴今天推荐路线南海子麋鹿苑博物馆(科普)亦花园创意产业生郭进拴游古堰画乡郭进拴游古堰画乡这是一座集悠久历史文化,有着动人传奇故事的地方,粉墙黛瓦青石拱桥幽深雨巷乌蓬小船,翰墨情深,古韵悠悠,有数不清的古代名人王羲之范成大陆游等在这里留下了足迹。步入依傍赵立坚微博点赞的桂林山水图找到拍摄地啦小伙伴们还记得这张全网热搜的桂林山水图吗?这是由英国的24岁自由旅行摄影师JordanHammond在中国拍摄的一系列摄影作品中的其中一幅,外交部发言人赵立坚于今年5月17日在个人