处理大量请求的aiohttp session.get()超时问题

时间:2020-04-14 01:54:15

标签: python python-3.x python-asyncio aiohttp

我很难在 aiohttp 上找到很多文档,尤其是最近的文档。我一直反复浏览相同的页面,主要是github问题和文档,找不到解决我问题的关键。

问题在于,在处理大量请求时,待处理的请求在发送之前会超时。

这是由于请求的( session.get())默认超时为5分钟,该超时从等待时间开始算起,而不是从我真正理解的请求开始算起。 因此,我之所以被阻止,是因为保留固定的超时时间将取消(超时)该时间之后的所有待处理请求或将超时设置为 None 会使程序等待在无响应的网站上无限期this issue中也出现了同样的问题,但我没有解决方法。

这是我失败的代码:

//Initiate Genre Menu
   LinearLayout menu = getActivity().findViewById(R.id.genre_menu);

    //Initiate GenreMenuSwitches class
    GenreMenuSwitches genresOptions = new GenreMenuSwitches(getActivity());


// Make Genre Button open menu on click
    ImageView genre_button = (ImageView) getActivity().findViewById(R.id.genre_options);
    genre_button.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        public void onClick(View v) {

            modifiedGames.clear();

            menu.setVisibility(View.VISIBLE);
            ((ViewGroup) getActivity().findViewById(R.id.genre_menu)).getLayoutTransition()
                    .enableTransitionType(LayoutTransition.CHANGING);

            menu.getLayoutParams().height= ViewGroup.LayoutParams.MATCH_PARENT;
            menu.getLayoutParams().width= ViewGroup.LayoutParams.MATCH_PARENT;

            updateUI(modifiedGames);
        }
    });





    // Set Menu's Confirm Button to hide menu and update UI
    Button confirm_button2 = getActivity().findViewById(R.id.menu_reset);
    confirm_button2.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        public void onClick(View v) {

           /*((ViewGroup) getActivity().findViewById(R.id.genre_menu)).getLayoutTransition()
                    .enableTransitionType(LayoutTransition.CHANGING);

            menu.getLayoutParams().height= 100;
            menu.getLayoutParams().width= 200;
            menu.setVisibility(View.GONE);*/

            Log.v("Options Size1", "" + genresOptions.genreChosen.size());
            if (genresOptions.genreChosen.size() != 0) {
                for (int i = 0; i < games.size(); i++) {
                    ArrayList<Integer> currentGamesGenre = games.get(i).getGenres();
                   outer: for (int x = 0; x < currentGamesGenre.size(); x++) {
                        for (int y = 0; y < genresOptions.genreChosen.size(); y++) {
                            if (currentGamesGenre.get(x) == genresOptions.genreChosen.get(y) ) {
                                modifiedGames.add(games.get(i));
                                break outer;
                            }
                        }

                    }
                }

                Log.v("Options Size2", "" + genresOptions.genreChosen.size());
                Log.v("Modified Size", "" + modifiedGames.size());
                updateUI(modifiedGames);


            }

        }
    });

我尝试将TCPConnector limit设置为None,但没有成功。

我看到有些人在谈论使用asyncio.wait而不是asyncio.gather,但是正如上面显示的问题3203所示,没有成功。

我尝试为每个请求设置一个ClientSession,但没有成功,但这可能是因为我缺乏理解。

感谢您的指导。

0 个答案:

没有答案