当前位置:首页>python>Python并发编程能力深度解析(下)

Python并发编程能力深度解析(下)

  • 2026-01-20 18:42:17
Python并发编程能力深度解析(下)

【接上篇】

三、asyncio深度解析:事件循环与协程调度

先来看事件循环机制,以下是代码

import asyncioimport selectorsclass SimpleEventLoop:    """简化版事件循环示例"""        def __init__(self):        self._ready = []          # 就绪任务队列                self._scheduled = []          # 定时任务                self._selector = selectors.DefaultSelector()                def create_task(self, coro):                    """将协程包装为任务"""                    task = asyncio.Task(coro)                    self._ready.append(task)                    return task            def run_until_complete(self, coro):            """运行直到任务完成"""                    task = self.create_task(coro)                    while self._ready or self._scheduled:                # 执行所有就绪任务                            while self._ready:                                    current = self._ready.pop(0)                                    try:                                            # 执行一步协程                                            result = current.send(None)                         # 处理返回的Future等                                     except StopIteration as e:                                             # 协程执行完成                                             print(f'Task completed with result: {e.value}')                                     # 处理I/O事件(简化版本)                                     # 实际asyncio会使用selector监控文件描述符

再来看协程调度原理和状态转换机制:

import asynciofrom enum import Enumclass TaskState(Enum):        PENDING = 1        RUNNING = 2        DONE = 3async def demonstrate_scheduling():    """演示协程调度状态转换"""        print("1. 协程开始执行")        # 遇到await,协程挂起,控制权返回事件循环        await asyncio.sleep(1)        print("2. 恢复执行,继续运行")        # 另一个挂起点        future = asyncio.Future()        await future        print("3. 协程执行完成")        return "result"    # 创建任务    task = asyncio.create_task(demonstrate_scheduling())    # 模拟事件循环调度    print(f"任务状态: {task._state}")

四、同步 vs 异步:Web应用性能对比

测试框架设计

import asyncioimport aiohttpimport requestsimport threadingfrom concurrent.futures import ThreadPoolExecutorimport timefrom statistics import meanimport matplotlib.pyplot as pltclass PerformanceTester:        """性能对比测试框架"""        def __init__(self, url, concurrent_requests=100):                self.url = url                self.concurrent = concurrent_requests            async def async_test(self):                    """异步测试"""                    async with aiohttp.ClientSession() as session:                tasks = []                            start = time.time()                for _ in range(self.concurrent):                                    task = session.get(self.url)                                    tasks.append(task)                                responses = await asyncio.gather(*tasks)                    elapsed = time.time() - start                                return elapsed, len(responses)            def sync_threaded_test(self):            """多线程同步测试"""                    def make_request():                            return requests.get(self.url)                    with ThreadPoolExecutor(max_workers=50as executor:                start = time.time()                            results = list(executor.map(make_request, range(self.concurrent)))                elapsed = time.time() - start                        return elapsed, len(results)            def run_comparison(self):                    """运行对比测试"""                    print(f"测试 {self.concurrent} 个并发请求到 {self.url}")            # 异步测试                    loop = asyncio.get_event_loop()                    async_time, async_count = loop.run_until_complete(self.async_test())                    # 同步测试                    sync_time, sync_count = self.sync_threaded_test()                    # 输出结果                    print(f"\n{'='*50}")                    print(f"异步(asyncio)结果: {async_time:.2f}秒, 处理 {async_count} 请求")                    print(f"多线程同步结果: {sync_time:.2f}秒, 处理 {sync_count} 请求")                    print(f"性能提升: {sync_time/async_time:.1f}倍")                # 可视化                self.visualize_results(async_time, sync_time)            def visualize_results(self, async_time, sync_time):            """结果可视化"""                    labels = ['asyncio异步''多线程同步']                    times = [async_time, sync_time]                            plt.figure(figsize=(85))                    bars = plt.bar(labels, times, color=['skyblue''lightcoral'])                    plt.ylabel('处理时间 (秒)')                    plt.title(f'并发请求性能对比 ({self.concurrent} 请求)')                    # 在柱状图上显示数值                    for bar, time_val in zip(bars, times):                        plt.text(bar.get_x() + bar.get_width()/2, bar.get_height(),                                f'{time_val:.2f}s', ha='center', va='bottom')                    plt.tight_layout()                   plt.show()# 运行测试if __name__ == '__main__':        # 使用本地测试服务器        tester = PerformanceTester('http://httpbin.org/delay/1', concurrent_requests=100)        tester.run_comparison()

性能差异分析

测试结果特征,低并发场景(<100连接):差异不明显;中等并发场景(100-1000连接):异步性能优势开始显现;高并发场景(>1000连接):异步显著优于同步,内存占用更低。

内存使用对比:

同步模型中,每个线程约8MB栈内存,1000线程≈8GB;异步模型中,每个协程约1KB,1000协程≈1MB。

五、实战:构建高性能异步Web应用

异步Web服务器架构

from aiohttp import webimport asyncpgimport aioredisfrom datetime import datetimeclass AsyncWebService:    """高性能异步Web服务示例"""        def __init__(self):                self.app = web.Application()                self.setup_routes()                self.setup_middleware()        async def init_db(self):                """初始化数据库连接池"""                self.db_pool = await asyncpg.create_pool(                                              user='user',                                              password='password',                                              database='database',                                              host='localhost',                                              min_size=5,                                              max_size=20)        async def init_cache(self):                """初始化Redis连接池"""                self.redis = await aioredis.create_redis_pool(                        'redis://localhost',                                    minsize=5,                                    maxsize=20)            def setup_middleware(self):        """设置中间件"""                @web.middleware                async def timing_middleware(request, handler):            start = datetime.now()                        response = await handler(request)                        elapsed = (datetime.now() - start).total_seconds()            response.headers['X-Response-Time'] = f'{elapsed:.3f}s'                        return response            self.app.middlewares.append(timing_middleware)        def setup_routes(self):        """设置路由"""                self.app.router.add_get('/api/users/{id}'self.get_user)                self.app.router.add_post('/api/users'self.create_user)                self.app.router.add_get('/api/products'self.list_products)            async def get_user(self, request):            """获取用户信息(带缓存)"""                    user_id = request.match_info['id']                    # 首先尝试从缓存获取                    cached = await self.redis.get(f'user:{user_id}')                    if cached:                return web.json_response({'cached'True'data': cached})                # 缓存未命中,查询数据库                async with self.db_pool.acquire() as conn:            user = await conn.fetchrow('SELECT * FROM users WHERE id = $1', user_id)            if user:                 # 写入缓存,设置5分钟过期                                 await self.redis.setex(                                         f'user:{user_id}',                                         300,                                                              user['name'])                                 return web.json_response(dict(user))                         else:                                 return web.json_response(                                         {'error''User not found'},                                          status=404)            async def create_user(self, request):        """创建用户(异步批量处理示例)"""                data = await request.json()                # 模拟异步批量处理                tasks = []                async with self.db_pool.acquire() as conn:            # 开启事务                        async with conn.transaction():                # 批量插入用户                                for user_data in data['users']:                    task = conn.execute('''INSERT INTO users (name, email)                                                    VALUES ($1, $2)''',                                                     user_data['name'],                                                     user_data['email'])                                            tasks.append(task)                # 并行执行所有插入操作                                await asyncio.gather(*tasks)                        return web.json_response({'status''success''created'len(data['users'])} )        async def list_products(self, request):                """商品列表(连接多个外部API)"""                # 并发查询多个数据源                tasks = [self.fetch_products_from_source('source1'),                 self.fetch_products_from_source('source2'),                             self.fetch_products_from_cache()]                        # 并行执行所有查询                results = await asyncio.gather(*tasks, return_exceptions=True)                # 合并结果                products = []                for result in results:                        if isinstance(result, Exception):                                # 处理错误,但不中断其他结果                                print(f"查询失败: {result}")                        elif result:                                products.extend(result)                    return web.json_response({'count'len(products),                                       'products': products})            async def fetch_products_from_source(self, source):        """从外部API获取商品数据"""                # 模拟外部API调用                await asyncio.sleep(0.1)                return [{'id'1'name'f'Product from {source}'}]        async def fetch_products_from_cache(self):                """从缓存获取商品数据"""                # 这里可以添加实际的缓存逻辑                return []        async def startup(self, app):                """应用启动时的初始化"""                await self.init_db()                await self.init_cache()                print("应用启动完成")            async def cleanup(self, app):                """应用关闭时的清理"""                await self.db_pool.close()                self.redis.close()                await self.redis.wait_closed()                print("应用关闭完成")            def run(self):                """运行应用"""                self.app.on_startup.append(self.startup)                self.app.on_cleanup.append(self.cleanup)                web.run_app(self.app,                     host='0.0.0.0',                     port=8080,                                 # 使用高性能HTTP解析器                                 access_log=None                      # 生产环境关闭访问日志提升性能)if __name__ == '__main__':        service = AsyncWebService()        service.run()

最佳实践与性能优化,连接池管理

# 优化数据库连接池配置async def get_optimized_db_pool():        return await asyncpg.create_pool(dsn='postgresql://user:pass@localhost/db',                                             min_size=5,                                               # 最小连接数                                             max_size=50,                                              # 最大连接数,根据CPU核心数调整                                             max_queries=50000,                                        # 连接复用次数                                             max_inactive_connection_lifetime=300,                                       # 空闲连接超时                                             command_timeout=60,                                       # 查询超时时间                                             setup=self.setup_connection  # 连接初始化函数)# 异步批处理模式:async def batch_process(items, batch_size=100):        """异步批处理模式"""        results = []        for i in range(0len(items), batch_size):                batch = items[i:i + batch_size]                # 为每个批次创建任务                tasks = [process_item(item) for item in batch]                # 并行处理当前批次                batch_results = await asyncio.gather(*tasks)                results.extend(batch_results)                # 避免资源耗尽,小睡片刻                await asyncio.sleep(0.001)            return results

六、总结:选择合适的并发模型

决策矩阵

场景特征

推荐模型

理由

CPU密集型计算

多进程

绕过GIL,真正并行

I/O密集型,并发<1000

多线程

简单易用,开发成本低

高并发I/O,连接>1000

asyncio协程

高并发,低内存

混合型任务

混合架构

进程处理CPU,协程处理I/O

【全文完】

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 12:35:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/464746.html
  2. 运行时间 : 0.158333s [ 吞吐率:6.32req/s ] 内存消耗:4,766.97kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b2d4a4ac12b817af28fb5df800a09d3d
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000417s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000844s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000804s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000324s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000634s ]
  6. SELECT * FROM `set` [ RunTime:0.001329s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000625s ]
  8. SELECT * FROM `article` WHERE `id` = 464746 LIMIT 1 [ RunTime:0.002567s ]
  9. UPDATE `article` SET `lasttime` = 1770525330 WHERE `id` = 464746 [ RunTime:0.001160s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001731s ]
  11. SELECT * FROM `article` WHERE `id` < 464746 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.015593s ]
  12. SELECT * FROM `article` WHERE `id` > 464746 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004800s ]
  13. SELECT * FROM `article` WHERE `id` < 464746 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.019815s ]
  14. SELECT * FROM `article` WHERE `id` < 464746 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.023230s ]
  15. SELECT * FROM `article` WHERE `id` < 464746 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.018216s ]
0.159800s