Motivated by the increasing need of the real-world patrolling, this paper studies a practical city-scale patrolling (CSP) variant. In CSP, the police are scheduled to patrol city regions, and the objective is not only to protect public security but also to respond to incidents timely. We use an integer program (IP) to formulate the CSP problem, with the objective of maximizing the police visibility rate (PVR) to improve public safety and the additional constraint of response time guarantee to handle incidents timely. For such an NP-hard problem, existing studies either cannot scale-up or do not provide a bound from optimum. To fill the research gap, we propose a decomposition and grafting approach. We first decompose the original CSP into two weakly-coupled subproblems, minimizing police problem (MinP) and maximizing PVR (MaxP) problem. By exploiting the subproblem structures, a polynomial time approximation algorithm is proposed for MinP, and a polynomial time optimal algorithm is proposed for MaxP. We prove that such a decomposition can provide the 1 - α approximation ratio, where α is the percentage of the police used in MinP. To further improve patrolling efficiency, a grafting mechanism is proposed to integrate the two subproblems' solutions. Finally, we conduct extensive experiments on the real dataset of Foshan, a modern Chinese city. The results demonstrate that compared with benchmarks, our approach scales well to city-scale problem instances with fine-grained periods, hundreds of regions, and hundreds of police officers.